Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7c406d9
Release 4.49.0
PySimpleGUI Sep 30, 2021
20ed7ae
Merge pull request #4759 from PySimpleGUI/Dev-latest
PySimpleGUI Sep 30, 2021
bacf730
mkdocs
PySimpleGUI Sep 30, 2021
647934c
Merge branch 'master' into Dev-latest
PySimpleGUI Sep 30, 2021
5aea536
Merge pull request #4760 from PySimpleGUI/Dev-latest
PySimpleGUI Sep 30, 2021
476d949
Added Element.set_right_click_menu
PySimpleGUI Oct 1, 2021
d82f726
Merge branch 'Dev-latest' of https://github.com/PySimpleGUI/PySimpleG…
PySimpleGUI Oct 1, 2021
f06817d
Merge pull request #4762 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
9db5a76
set_right_click_menu - if no menu specified, use the parent window's …
PySimpleGUI Oct 1, 2021
2cd30e7
Merge pull request #4763 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
a50bd7b
NEW Demo Program - Launcher Bar Desktop Widget
PySimpleGUI Oct 1, 2021
81a950a
Merge pull request #4764 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
99eb2b7
User Settings Support for Trinket
PySimpleGUI Oct 1, 2021
5d636ce
Merge pull request #4765 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
08bf91a
Detection of running on the replit environment. Having trouble with s…
PySimpleGUI Oct 1, 2021
b1dbf67
Merge pull request #4766 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
d176dca
Make the canvas's background color match the element's when using pin…
PySimpleGUI Oct 1, 2021
56df7f1
Added minimize feature, excel custom icon
PySimpleGUI Oct 1, 2021
233d80f
Merge pull request #4767 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 1, 2021
2e02329
A .pyw version of the launcher demo (is using in an upcoming Cookbook…
PySimpleGUI Oct 2, 2021
f6f6d46
Merge pull request #4769 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 2, 2021
47724f0
Recipe - how to launch without a console using pythonw.exe
PySimpleGUI Oct 2, 2021
2e48a11
Merge pull request #4770 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 2, 2021
8a9b532
Refreshed with built-in clipboard, friendlier to Trinket
PySimpleGUI Oct 2, 2021
1065b03
Merge pull request #4772 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 2, 2021
0c4361a
New set_options option - warn_button_key_duplicates
PySimpleGUI Oct 3, 2021
4b2bbf6
Merge pull request #4776 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 3, 2021
9ff0e04
New Demo - Create link to your Python file on Windows
PySimpleGUI Oct 3, 2021
cc25da3
Merge pull request #4777 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 3, 2021
ad0fc07
Addition of icon
PySimpleGUI Oct 3, 2021
a98a2c2
Merge pull request #4778 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 3, 2021
98e7a57
Simplified support to be for local files only
PySimpleGUI Oct 3, 2021
6d61943
Merge pull request #4779 from PySimpleGUI/Dev-latest
PySimpleGUI Oct 3, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions DemoPrograms/Demo_Color_Swatches.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env python
import PySimpleGUI as sg
import sys

"""
Big chart of tkinter colors shown as swatches.
Expand Down Expand Up @@ -672,20 +673,29 @@

def make_window():
layout = [[sg.Text(f'Swatches for {len(color_list)} Colors', font='Default 14'),],
[sg.Text(f'Hover - see color "name"\nRight click - see hex value\nClick - see buttons & hex value copied to clipboard', font='Default 12')]]
[sg.Text(f'Hover - see color "name"\nRight click - see hex value\nClick - see buttons & hex value copied to clipboard', font='Default 12')],
[sg.Text(f'PySimpleGUI version: {sg.ver}', font='_ 12')],
[sg.Text(f'Python version: {sys.version}', font='_ 12')],
[sg.Text(f'tkinter version: {sg.tclversion_detailed}', font='_ 12')],
]


for rows in range(len(color_list)//COLORS_PER_ROW+1):
row = []
for i in range(COLORS_PER_ROW):
try:
color = color_list[rows*COLORS_PER_ROW+i]
row.append(sg.T(sg.SYMBOL_SQUARE, text_color=color, pad=(0, 0), font=('Default', font_size), right_click_menu=['Nothing', color_map[color]],
row.append(sg.T(' ', s=1, background_color=color, text_color=color, font=('Default', font_size), right_click_menu=['_', color_map[color]],
tooltip=color, enable_events=True, key=(color, color_map[color])))
except IndexError as e:
break
except Exception as e:
pass
sg.popup_error(f'Error while creating color window. Something with the Text elements perhaps....', e,
f'rows = {rows} i = {i}')
break
layout.append(row)

return sg.Window('Color Swatches Viewer', layout, font='Any 9', element_padding=(0,0), border_depth=0)
return sg.Window('Color Swatches Viewer', layout, font='Any 9', element_padding=(1,1), border_depth=0, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_EXIT, use_ttk_buttons=True)

def main():
sg.theme('black')
Expand All @@ -695,7 +705,10 @@ def main():
event, values = window.read()
if event == sg.WIN_CLOSED:
break
if isinstance(event, tuple):
if event == 'Edit Me':
sg.execute_editor(__file__)
continue
elif isinstance(event, tuple):
color, color_hex = event[0], event[1]
else:
color, color_hex = hex_to_color[event], event
Expand All @@ -704,8 +717,7 @@ def main():
[sg.DummyButton(color, button_color=('white',color), tooltip=color_hex),
sg.DummyButton(color, button_color=('black',color), tooltip=color_hex)]]
window2 = sg.Window('Buttons with white and black text', layout2, keep_on_top=True, finalize=True)
window2.TKroot.clipboard_clear()
window2.TKroot.clipboard_append(color_hex)
sg.clipboard_set(color_hex)

window.close()

Expand All @@ -719,7 +731,8 @@ def main():

# -- Create primary color viewer window --
hex_to_color = {v: k for k, v in color_map.items()}
color_list = [key for key in color_map]
color_list = list(color_map.keys())
# [key for key in color_map]
COLORS_PER_ROW = 40
font_size = 18
main()
124 changes: 124 additions & 0 deletions DemoPrograms/Demo_Desktop_Widget_Launcher_Bar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
import PySimpleGUI as sg

"""
Demo Launcher Bar

A 2021 version of a PySimpleGUI based launcher.
Once making the GUI leap, it's hard to go back.... at least for some people.
This tool will perhaps help make for a more GUI-like environment for your Python activities


Copyright 2021 PySimpleGUI
"""
excel_icon = b'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAsSAAALEgHS3X78AAAFB0lEQVRIx51We0xTZxQ/X3t5lZY+QLwgLYgg4MSJOAQCOgED23SgMjedr2mY2UQhwblHNpK5xCxTM+Nkf+Dc2NTMZJCpEF3YsqU6y5ZsGpextSD0AcKlBeVR+rrt/fbHhcv1tlTGSdN8j3O/33mfgxiGAR4hhDDG7D/MTgghAGA5+efcCbdAAgA+jGDLYDzuspuGByZck7JwSZYmw/9dARgAEEHE9Hhp08iAftBooEx6ytg1ZB4YtblpDwCsVKe11ZzlC8sJxNmA3c4A0D7vg0fWbqtZP2gyUCYDZTIO97tozyw2mhGce4t9mv86QggxDNOobW69p+219U+4HQEt5k8xMsXGFWv9zzEGDBghFCImSjJyC1KzCISQrufeXYse/g+FikNTYjVBGMac9vorDb8cPU8Ej5ZZNZAqXiuo4Ftf4I/BMds3utYnODkIDYxa6680AEBRek5GfHLDz5fxtGvyU1aWPpUPABgwxnieAMP20fO3vgcAZaSclMd8+esVzhKEWMwCIEDz10ASGp5GJgEAGRUdERqWpU7HMAWwSBE7HUKAECL8U0ytIqVhEqOt30m7AWBLdkmiitR2/XnH/C/HlhKraT38Gbe9dviMf54DIIwxIchABKhxd31mQurbzacvdrQlL0g4ta3O46MvdLTx2fSUMf/4LkBQtbZyXVr2rnPvcRrsWPP8oeIdAAgBIIREgihiMNOobcYYb88pA4CdeRtDiZCLHW3D9lFBklseUpYRasw5QXu97Jr9PXKMY4wBMCAI7OTWv7R1pXsyE5ZmJy17afUGu8vRqG0R8JDy6N15LwJA7pIVMTLlW2V7AYDVYVViOj+TAwDQXu8Xt1o+qqj+eGuNUhJ17mbL0PiIgCcqQlq6PJ9NaVmYhA0bllSRcn49CRxFzX/8VFuyMyMu2eFxNd5s9mfooszFJ6sA4EjpnucyC0pOvc6Z+sC6yg82HeAKqmiWcg8+zCCExCJROBH2xMYgqIOPmSgAB8Ce/PKFUdF3zP9kaTLeWL/t6HefChiWkomf73wfAC+QKmXhkT/WNcKUE5AqMoorfQAQQAN5hLRq7ZZJt7P28gmnx7U1uyQxOk7AM+6cbO/UtXd29Nj67W5He6eO3bZ36rqGzFOKYAjsg32Fm6Oliku/Xe+x9l27p335mdKDRa8IlKDGhj+58RUAHCnbK5dIT/zQNOODZysLU1cBYBzQBwqJbH/BZi/j+1p3FQCabl/1MUzl6g1qFflYuSZC1CpSrSLlEZEhIkKtWshu1SpSESHjcwo1cNGe8rM1YpGoe8gCAH8/uP9Oy+lFytikmPi+hxTHlk4uvl7bwG11716YLQT8Adw91j5+4/729xv+X963WjadOQQAr+a9kL/k6epLx7mCsHlV0f7CLTMazK/hODwutgkWL8t10u67FgP3Ts7i5Xz5AofpXDpaedZ6AMjSpCklUfsKKrirNcmZ/Flmnv0gXhH7YfmbXKIdqzjoNx1NddB5AozYR5tuXw3e9OUS6VQURYSEiUUi39wGFpbcPrrH1j+TsXhqUoLp1kyIiGPlBxE7AdA+78CotXvIwk5wBsrUa+t3etxBAASTnWCg4wcOgTEOERMaVZxGFVeyLJe9o31e88iggTLqB416ytQ1ZH7wyOqi3YLJzn9uFIBhjINN0ZxEDGYmnJPGkQH9YK+BMjs8TrWSrC7ePhdjBgYPuAgyu8/I63f1H5J3l/PVeWn1AAAAAElFTkSuQmCC'

# This is your master table.... keys are what will be shown on the bar. The item is what you want to happen.
launcher_buttons = {
sg.SYMBOL_DOWN_ARROWHEAD : None,
'PSG Main': sg.main,
'Word': r"C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE",
excel_icon: r"C:\Program Files\Microsoft Office\root\Office16\excel.EXE",
'Notepad++': r"C:\Program Files\NotePad++\notepad++.exe",
sg.EMOJI_BASE64_HAPPY_IDEA: sg.main_sdk_help,
'All Elements' : r'C:\Python\PycharmProjects\PSG\DemoPrograms\Demo_All_Elements.py',
'Exit': None}

MINIMIZED_IMAGE = sg.EMOJI_BASE64_HAPPY_THUMBS_UP

DEFAULT_SCREEN_BACKGROUND_COLOR = 'black'
DEFAULT_BUTTON_SIZE = (None, None)

def settings(window:sg.Window):
layout = [[sg.T(f'Screen size = {sg.Window.get_screen_size()}')],
[sg.T(f'Your launcher is currently located at {window.current_location()}')],
[sg.T('Enable autosave and position your window where you want it to appear next time you run.')],
[sg.T('Your Screen Background Color'), sg.In(sg.user_settings_get_entry('-screen color-', DEFAULT_SCREEN_BACKGROUND_COLOR), s=15,k='-SCREEN COLOR-')],
[sg.CBox('Autosave Location on Exit', default=sg.user_settings_get_entry('-auto save location-', True), k='-AUTO SAVE LOCATION-')],
[sg.CBox('Keep launcher on top', default=sg.user_settings_get_entry('-keep on top-', True), k='-KEEP ON TOP-')],
[sg.OK(), sg.Cancel()]]
event, values = sg.Window('Settings', layout).read(close=True)
if event == 'OK':
sg.user_settings_set_entry('-auto save location-', values['-AUTO SAVE LOCATION-'])
sg.user_settings_set_entry('-keep on top-', values['-KEEP ON TOP-'])
sg.user_settings_set_entry('-screen color-', values['-SCREEN COLOR-'])
if values['-KEEP ON TOP-']:
window.keep_on_top_set()
else:
window.keep_on_top_clear()


def make_window():

screen_background_color = sg.user_settings_get_entry('-screen color-', DEFAULT_SCREEN_BACKGROUND_COLOR)
old_bg = sg.theme_background_color()
sg.theme_background_color(screen_background_color)
button_row = []
for item in launcher_buttons.keys():
tip = 'Grab anywhere to move the launcher\nClick an item to launch something\nRight Click to get to settings'
if isinstance(item, bytes):
button = sg.Button(image_data=item, key=item, metadata=launcher_buttons[item], button_color=screen_background_color,tooltip=tip, border_width=0)
else:
button = sg.Button(item, key=item, metadata=launcher_buttons[item], tooltip=tip, border_width=0)
button_row.append(button)

col_buttons = sg.Column([button_row], p=0, k='-BUTTON COL-')
col_minimized = sg.Column([[sg.Button(image_data=MINIMIZED_IMAGE, k='-MINIMIZED IMAGE-', button_color=sg.theme_background_color(), border_width=0)]], visible=False, k='-MINIMIZED COL-')

layout = [[sg.pin(col_minimized), sg.pin(col_buttons)]]

screen_size = sg.Window.get_screen_size()
location = screen_size[0] // 2, screen_size[1] - 200 # set a default location centered and near the bottom of the screen
location = sg.user_settings_get_entry('-window location-', location)
keep_on_top = sg.user_settings_get_entry('-keep on top-', True)



window = sg.Window('Window Title', layout, location=location,
keep_on_top=keep_on_top, no_titlebar=True, grab_anywhere=True, background_color=screen_background_color,
auto_size_buttons=False, default_button_element_size=DEFAULT_BUTTON_SIZE, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_SETTINGS_EXIT,
enable_close_attempted_event=True, use_default_focus=False)
sg.theme_background_color(old_bg)

return window


def main():
window = make_window()

while True:
event, values = window.read(timeout=1000) # Not needed but handy while debugging
# print(event, values)
if event in (sg.WIN_CLOSE_ATTEMPTED_EVENT, 'Exit', sg.WIN_CLOSED):
if event != sg.WIN_CLOSED:
if sg.user_settings_get_entry('-auto save location-', True):
print('saving locatoin', window.current_location())
sg.user_settings_set_entry('-window location-', window.current_location())
break
if event in launcher_buttons:
action = window[event].metadata
if isinstance(action, str):
if action.endswith(('.py', '.pyw')):
sg.execute_py_file(action)
else:
sg.execute_command_subprocess(action)
elif callable(action):
action()
if event == 'Edit Me':
sg.execute_editor(__file__)
elif event == 'Version':
sg.popup_scrolled(sg.get_versions())
elif event == 'Settings':
settings(window)
window.close()
window = make_window()
elif event == sg.SYMBOL_DOWN_ARROWHEAD:
window['-BUTTON COL-'].update(visible=False)
window['-MINIMIZED COL-'].update(visible=True)
elif event == '-MINIMIZED IMAGE-':
window['-BUTTON COL-'].update(visible=True)
window['-MINIMIZED COL-'].update(visible=False)
window.close()


if __name__ == '__main__':
main()
Loading