From 5ee22c0568edf057df069f23d91d14854f9b14d1 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 8 May 2022 14:09:25 -0400
Subject: [PATCH 001/467] Fill in the details fields next to OS in the Open
GitHub Issue function
---
PySimpleGUI.py | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index c89076cf..993e4133 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,9 +1,13 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0 Released 8-May-2022"
+version = __version__ = "4.60.0.1 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
+
+ 4.60.0.1
+ main_open_github_issue - prefill the "Details" using the platform module (thank you macdeport!)
+ Fills Mac, Windows and Linux with details
"""
@@ -23556,6 +23560,8 @@ def main_open_github_issue():
window = Window('Open A GitHub Issue', layout, finalize=True, resizable=True, enable_close_attempted_event=True, margins=(0, 0))
+
+
# for i in range(len(checklist)):
[window['-T{}-'.format(i)].set_cursor('hand1') for i in range(len(checklist))]
# window['-TABGROUP-'].expand(True, True, True)
@@ -23563,6 +23569,15 @@ def main_open_github_issue():
# window['-ML DETAILS-'].expand(True, True, True)
# window['-ML MARKDOWN-'].expand(True, True, True)
# window['-PANE-'].expand(True, True, True)
+
+ if running_mac():
+ window['-OS MAC VER-'].update(platform.mac_ver())
+ elif running_windows():
+ window['-OS WIN VER-'].update(platform.win32_ver())
+ elif running_linux():
+ window['-OS LINUX VER-'].update(platform.libc_ver())
+
+
window.bring_to_front()
while True: # Event Loop
event, values = window.read()
From 7a74089157f1c2f6441133807cd62d58a7f8f6f8 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Mon, 9 May 2022 17:00:35 -0400
Subject: [PATCH 002/467] Addition of SizeGrip element (makes resizing the
window oh-so-nice! Also makes clear window is resizable)
---
DemoPrograms/Browser_START_HERE_Demo_Programs_Browser.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/DemoPrograms/Browser_START_HERE_Demo_Programs_Browser.py b/DemoPrograms/Browser_START_HERE_Demo_Programs_Browser.py
index 406ea19f..9daa99c3 100644
--- a/DemoPrograms/Browser_START_HERE_Demo_Programs_Browser.py
+++ b/DemoPrograms/Browser_START_HERE_Demo_Programs_Browser.py
@@ -491,7 +491,7 @@ def make_window():
[choose_folder_at_top],
# [sg.Column([[left_col],[ lef_col_find_re]], element_justification='l', expand_x=True, expand_y=True), sg.Column(right_col, element_justification='c', expand_x=True, expand_y=True)],
[sg.Pane([sg.Column([[left_col],[ lef_col_find_re]], element_justification='l', expand_x=True, expand_y=True), sg.Column(right_col, element_justification='c', expand_x=True, expand_y=True) ], orientation='h', relief=sg.RELIEF_SUNKEN, k='-PANE-')],
- [options_at_bottom]]
+ [options_at_bottom, sg.Sizegrip()]]
# --------------------------------- Create Window ---------------------------------
window = sg.Window('PSG Demo & Project Browser', layout, finalize=True, resizable=True, use_default_focus=False, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT)
From 04c6f88ecb0d6a07d6305bc610dd2ca09a565111 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Tue, 10 May 2022 09:15:09 -0400
Subject: [PATCH 003/467] Moved around the location the icon is set. Set the
icon using set_global_icon so that popups also use the custom icohn
---
.../Demo_Image_Resize_and_Base64_Encode.pyw | 23 +++++++++++++++----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/DemoPrograms/Demo_Image_Resize_and_Base64_Encode.pyw b/DemoPrograms/Demo_Image_Resize_and_Base64_Encode.pyw
index 7775f61b..38589e9c 100644
--- a/DemoPrograms/Demo_Image_Resize_and_Base64_Encode.pyw
+++ b/DemoPrograms/Demo_Image_Resize_and_Base64_Encode.pyw
@@ -1,6 +1,5 @@
import PySimpleGUI as sg
from PIL import Image
-import PIL
import os
import base64
import io
@@ -25,12 +24,18 @@ import webbrowser
Copyright 2021 PySimpleGUI
"""
-version = '1.3.1'
+version = '1.5.4'
__version__ = version.split()[0]
'''
Change log
+ 1.5.4 10-May-2022
+ Had to mess around with the entry point due to setuptools
+ 1.5.0 10-May-2022
+ Moved icon to bottom of file and called set_global_icon so all windows in this application (including popups) will use this icon
+ 1.4.0 16-Nov-2021
+ Explicitly set the settings filename. I'm still learning about these PyPI .EXE releases. Need to be explicit rather than default
1.3.1 16-Nov-2021
Added correct readme to PyPI
1.3.0 16-Nov-2021
@@ -65,7 +70,6 @@ def resize(input_file, size, output_file=None, encode_format='PNG'):
def main():
- image_resize_icon = b'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAJaklEQVR4nMWabYxU1RnHf885d+7s7uxrBWFFEClagqxYX1upWm3Q2i+KiaRNqwg0VWljtVjR2pT4oZFGa0pSSxt1gdjEBk0x0cZi1QpCGrUmwgKlVkWBZdcX2GWX2Z25L+fphzu7vOzMujO7q/8PM3fu3Oee53/Oc5/zP8+5wjjgwPpZp6RNakIc0aQqNQAi2mc9uvIu/PT0RXsOjXWbMhY3OdR6ztTQmG+I43IHc0GngjSCVilik4Y0BsmBdoPsN7BdDVtSzm09Zcmu/aP1oWIi76yema6vq/62ERY51SvTKdsoArFTYgeqigLJR9KSACKCNWCNoApB5LqAV42wrutI/6azf/pu/nMhoisxndPPXWhEl1sjF1ojBJHDuUqaB2PA90zSAbH+W1QenvjhjqflAcq6Y1lE9j9xzty0Nb+xRq4BCCL9LJOy4HuJO3Gsm/LOrZi6dNf2kdqOmEjH2pYfW+HXKc805IIKu3+EqPINYeSOxMr9zYvbHh2JzWcS2bv2jKoa6n+X8uTWKE6egc8D1giehTDSP/XRc+eZiz/MDXf9sEQ+2jC71h21T2bS5vq+wKEKhY+x9Lm4WyKIQI1v6A/cRjLxzZMW7j46jEVx6Norqj7Ww09Vp8312bxD4xBQTCoDxhvOdJRQ1IVo2Jc4aH0yaUM2757NyZe+d+bizUVHxit1u049vDozSCLAb76IzOzv4zWdjXhVJETGY2QUjfqJut6jb89fyLf/i2zepyZtrtf84dXArcWsinbrwcdbllWlzaNB5HBRQHrK12ma/wfEqx4Hx0tD4zzdL91Bbv9mjOfje4ZcoMtOW7pjzcnXDiGyr7WlJS1sFZH62Cm4iKZrHiN9+jyiIx+Q3bmOuPcAiMGkasH6xW6DVBp5qmAsmZaleI0zCD5+m8N/uxlQrDGoao+zMq/55h07jzc7IbR0w422s3fPb9O+qe8PHKhD/Fq8xukAZNtaybatS0LLhSCGouGloChiUpVxiXKI9am/dCWpxhmY6gm4vo+InVDtm/q+vHtEN3CtLCQuSqSzZ88Nvi/z+0+YJ4TBHnchYn1sZhJ1F92NyZxawhMlaN9Gduf6AtkyIUJ09GDh2CLGS/pLIBc40imZ39HbsgDanhlC5J3VM9OI3jt8NhLUhfiTLqD6rOuG9cVrPJPsf56COKwozqTgh8YhGucH3To2/nrfO6tnPjegzQaJ1NWm56dS5vwRyY6TetnlDtP/7nNJM2JAIeh4HeI8BfFbPpFUpkAkj8YBx3dwECl+ypxfV5ueDzx/AhHELLFGCCtIqeLXo2GWnjceQsQmZMQg1q+IBKqITReOHcWeQ2uEUMwSCkQMwKfr5k4BvSqMytNQLneYfPs2xHjUfnUZDZf+CmwKsX7lJEaIMHIoetW+dXOnQIFIqNFlVSnbEJerBV3EkS33k3v/BQAyLYupv/jnqMaFnhw/xA6qU7bBRNFlUCCCmisqyvtikklr8wpyezcBkGlZQv1Fd6MlQmIsIQLWyOUARldiVPW88lStDH6L8dA4oHvzvcfInLuUugvuQF1c+hZjgMRnOU9XYkz7jFlNAlPLCSuN+weOUBcmef4kMumpVyTnx3FUCkvqae0zZjV54ryJCo2qI2tQrE/Q8SY9r68i7j2ABkcLWQqIA468dj9Bx+sEn7SR1BsqS78jQcHnRnHeRM/GNKkhPfJ+EzTOkd3ROjTFGotGebK7/pyMhikprscEmriT1pgmT42pBvXKiwApSPlifw3z31hDQRBrjVSbY6dKYewWUBoHaJwr0pyiUS6RIuXes/BtxLl+0LikvyKVCb8hLTqqpl9NzazvJlJ9cJ5REI9My+Lkv3IgABrHzvV7saVLHHkjeEWHRUwiO0YDF2Myp9J45UOITeM1TE/kDKAak5rwFeq/dh+oI+h8g+jQf8vgQV4sXUZN9AnQLUVnRE1ImFESMQaX6yL3wUtAYdK8+J5EATiHmCRhqB47HhGRxOfuTMZ9bKa8v6dLRPbZUtFj7BikUEnkzGu/PEnO3JOkaB2YOMur0FgDiOxr2LW728gDOKduuzVFRkRBjIeMdkQgec5cQPeW+04gU3fJPRXLGWsEQd+WB3AGwAivFp8PNZkLxmpSEwsuTMjs/TsAtXN/RN2Fd0IFcibxWTfDgPo13tb+MD5SNLwG1hdjgGSRFKJBL10v30n//zYCSnrKvKTDRqguIAmr/jA+Eua9rVBYWE27ZXt7R2vLKynPLIiL1nVHO5coiCXTshivceYAK5BEcA4uospAyjPEoXt52u3b2+G4FWKsrjV2smCoDwqFCr/Guco4uRjbMI36S+4d9rKkyDCyEEuUr7YO/B4kMqVOX+zs1bf8lFxwwrpdI3AOLLggS0VMjMVlOzi6/TG8xi+XvCw6tIuot/0z073vCUGob02uc/8YQkQW7g4OPtGyCnh6sBgqksS1C0cZXEn1pffNhxm+I7QgQkuXYwes1ciDsnB3MIQIQHNd28bOoy0vVvvm6qS2JYkGCvsg3YBX20wu7C/roSzmbEmIJHosyh2XKU8kXuUb+vLxi811O589/vwJRGQhccfjsjwfum3WSH3sBA2O4vo+wtY2U3POTaiLxmU9rnEeDbMAmNpmMrN/AIDLHSpU5gVrhHzoekTN8uOrjEPpFnDw8Tm3VaXtmqSInaf6rOtovHzVmKXhEcPFdG9eQf97zxeK2EIu724/7Yc7/3jypSUDtuOJljU1Vea2vrwDF5Ge9k2qz7oBr3HGOK43BqqLOaKud+nbs4F8+1bEpKhJG/rybk3zkrZlxSxLLuFypucu8vWTMmmzIJv3yH34Crl9/8R4NeO80QNohAuzhULd4EbPxpz0/KyUyfBbb7+fXasZu77aNzf0f0Fbb9W+oS9wfz2UjRfN+UkFW28D2Lv2jKpq6h/xPbn9i9gMDUJdM2ly/13yneFfJBhxfHSunXObMfKgb01jLnDjNibCwPa0doWR+0WxB7uU3Yix/7E55/qeWeVZrgUIIx0zQgKkCi8MRDEvqOqKyUva2sqxLwuqSGfrnButkeXGyMXWCmGkFYecNULKE+JYiZ2+IfDwxFvanhEpt65TIXaunO2fMsO72sIi5/RbaU+aRKTMl2qUfKRdBnk5NvH6ybmqTXLrW2El/oxJDv30yZbTnZN5zukVwFxVnTbca04iss8gb2PYYoxum3BT24HR+jAuk8EX8eLZ/wFhy2TPNmJizQAAAABJRU5ErkJggg=='
def update_outfilename():
infile = values['-IN-']
@@ -104,6 +108,9 @@ def main():
# window['-HEIGHT-'].update('')
window['-NEW FILENAME-'].update()
+ sg.user_settings_filename(filename='psgresizer.json')
+
+
format_list = ('', 'PNG', 'JPEG', 'BMP', 'ICO', 'GIF', 'TIFF')
new_format_layout = [
[sg.Combo(format_list, default_value=sg.user_settings_get_entry('-new format-', ''), readonly=True, enable_events=True, key='-NEW FORMAT-')]]
@@ -128,7 +135,7 @@ def main():
sg.T('A PySimpleGUI Application - Go to PySimpleGUI home', font='_ 8', enable_events=True, k='-PYSIMPLEGUI-')],
]
- window = sg.Window('Resize Image', layout, icon=image_resize_icon, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_LOC_EXIT,
+ window = sg.Window('Resize Image', layout, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_LOC_EXIT,
enable_close_attempted_event=True, finalize=True)
window['-PSGRESIZER-'].set_cursor('hand1')
window['-PYSIMPLEGUI-'].set_cursor('hand1')
@@ -193,5 +200,11 @@ def main():
window.close()
+def main_entry_point():
+ image_resize_icon = b'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAJaklEQVR4nMWabYxU1RnHf885d+7s7uxrBWFFEClagqxYX1upWm3Q2i+KiaRNqwg0VWljtVjR2pT4oZFGa0pSSxt1gdjEBk0x0cZi1QpCGrUmwgKlVkWBZdcX2GWX2Z25L+fphzu7vOzMujO7q/8PM3fu3Oee53/Oc5/zP8+5wjjgwPpZp6RNakIc0aQqNQAi2mc9uvIu/PT0RXsOjXWbMhY3OdR6ztTQmG+I43IHc0GngjSCVilik4Y0BsmBdoPsN7BdDVtSzm09Zcmu/aP1oWIi76yema6vq/62ERY51SvTKdsoArFTYgeqigLJR9KSACKCNWCNoApB5LqAV42wrutI/6azf/pu/nMhoisxndPPXWhEl1sjF1ojBJHDuUqaB2PA90zSAbH+W1QenvjhjqflAcq6Y1lE9j9xzty0Nb+xRq4BCCL9LJOy4HuJO3Gsm/LOrZi6dNf2kdqOmEjH2pYfW+HXKc805IIKu3+EqPINYeSOxMr9zYvbHh2JzWcS2bv2jKoa6n+X8uTWKE6egc8D1giehTDSP/XRc+eZiz/MDXf9sEQ+2jC71h21T2bS5vq+wKEKhY+x9Lm4WyKIQI1v6A/cRjLxzZMW7j46jEVx6Norqj7Ww09Vp8312bxD4xBQTCoDxhvOdJRQ1IVo2Jc4aH0yaUM2757NyZe+d+bizUVHxit1u049vDozSCLAb76IzOzv4zWdjXhVJETGY2QUjfqJut6jb89fyLf/i2zepyZtrtf84dXArcWsinbrwcdbllWlzaNB5HBRQHrK12ma/wfEqx4Hx0tD4zzdL91Bbv9mjOfje4ZcoMtOW7pjzcnXDiGyr7WlJS1sFZH62Cm4iKZrHiN9+jyiIx+Q3bmOuPcAiMGkasH6xW6DVBp5qmAsmZaleI0zCD5+m8N/uxlQrDGoao+zMq/55h07jzc7IbR0w422s3fPb9O+qe8PHKhD/Fq8xukAZNtaybatS0LLhSCGouGloChiUpVxiXKI9am/dCWpxhmY6gm4vo+InVDtm/q+vHtEN3CtLCQuSqSzZ88Nvi/z+0+YJ4TBHnchYn1sZhJ1F92NyZxawhMlaN9Gduf6AtkyIUJ09GDh2CLGS/pLIBc40imZ39HbsgDanhlC5J3VM9OI3jt8NhLUhfiTLqD6rOuG9cVrPJPsf56COKwozqTgh8YhGucH3To2/nrfO6tnPjegzQaJ1NWm56dS5vwRyY6TetnlDtP/7nNJM2JAIeh4HeI8BfFbPpFUpkAkj8YBx3dwECl+ypxfV5ueDzx/AhHELLFGCCtIqeLXo2GWnjceQsQmZMQg1q+IBKqITReOHcWeQ2uEUMwSCkQMwKfr5k4BvSqMytNQLneYfPs2xHjUfnUZDZf+CmwKsX7lJEaIMHIoetW+dXOnQIFIqNFlVSnbEJerBV3EkS33k3v/BQAyLYupv/jnqMaFnhw/xA6qU7bBRNFlUCCCmisqyvtikklr8wpyezcBkGlZQv1Fd6MlQmIsIQLWyOUARldiVPW88lStDH6L8dA4oHvzvcfInLuUugvuQF1c+hZjgMRnOU9XYkz7jFlNAlPLCSuN+weOUBcmef4kMumpVyTnx3FUCkvqae0zZjV54ryJCo2qI2tQrE/Q8SY9r68i7j2ABkcLWQqIA468dj9Bx+sEn7SR1BsqS78jQcHnRnHeRM/GNKkhPfJ+EzTOkd3ROjTFGotGebK7/pyMhikprscEmriT1pgmT42pBvXKiwApSPlifw3z31hDQRBrjVSbY6dKYewWUBoHaJwr0pyiUS6RIuXes/BtxLl+0LikvyKVCb8hLTqqpl9NzazvJlJ9cJ5REI9My+Lkv3IgABrHzvV7saVLHHkjeEWHRUwiO0YDF2Myp9J45UOITeM1TE/kDKAak5rwFeq/dh+oI+h8g+jQf8vgQV4sXUZN9AnQLUVnRE1ImFESMQaX6yL3wUtAYdK8+J5EATiHmCRhqB47HhGRxOfuTMZ9bKa8v6dLRPbZUtFj7BikUEnkzGu/PEnO3JOkaB2YOMur0FgDiOxr2LW728gDOKduuzVFRkRBjIeMdkQgec5cQPeW+04gU3fJPRXLGWsEQd+WB3AGwAivFp8PNZkLxmpSEwsuTMjs/TsAtXN/RN2Fd0IFcibxWTfDgPo13tb+MD5SNLwG1hdjgGSRFKJBL10v30n//zYCSnrKvKTDRqguIAmr/jA+Eua9rVBYWE27ZXt7R2vLKynPLIiL1nVHO5coiCXTshivceYAK5BEcA4uospAyjPEoXt52u3b2+G4FWKsrjV2smCoDwqFCr/Guco4uRjbMI36S+4d9rKkyDCyEEuUr7YO/B4kMqVOX+zs1bf8lFxwwrpdI3AOLLggS0VMjMVlOzi6/TG8xi+XvCw6tIuot/0z073vCUGob02uc/8YQkQW7g4OPtGyCnh6sBgqksS1C0cZXEn1pffNhxm+I7QgQkuXYwes1ciDsnB3MIQIQHNd28bOoy0vVvvm6qS2JYkGCvsg3YBX20wu7C/roSzmbEmIJHosyh2XKU8kXuUb+vLxi811O589/vwJRGQhccfjsjwfum3WSH3sBA2O4vo+wtY2U3POTaiLxmU9rnEeDbMAmNpmMrN/AIDLHSpU5gVrhHzoekTN8uOrjEPpFnDw8Tm3VaXtmqSInaf6rOtovHzVmKXhEcPFdG9eQf97zxeK2EIu724/7Yc7/3jypSUDtuOJljU1Vea2vrwDF5Ge9k2qz7oBr3HGOK43BqqLOaKud+nbs4F8+1bEpKhJG/rybk3zkrZlxSxLLuFypucu8vWTMmmzIJv3yH34Crl9/8R4NeO80QNohAuzhULd4EbPxpz0/KyUyfBbb7+fXasZu77aNzf0f0Fbb9W+oS9wfz2UjRfN+UkFW28D2Lv2jKpq6h/xPbn9i9gMDUJdM2ly/13yneFfJBhxfHSunXObMfKgb01jLnDjNibCwPa0doWR+0WxB7uU3Yix/7E55/qeWeVZrgUIIx0zQgKkCi8MRDEvqOqKyUva2sqxLwuqSGfrnButkeXGyMXWCmGkFYecNULKE+JYiZ2+IfDwxFvanhEpt65TIXaunO2fMsO72sIi5/RbaU+aRKTMl2qUfKRdBnk5NvH6ybmqTXLrW2El/oxJDv30yZbTnZN5zukVwFxVnTbca04iss8gb2PYYoxum3BT24HR+jAuk8EX8eLZ/wFhy2TPNmJizQAAAABJRU5ErkJggg=='
+
+ sg.set_global_icon(image_resize_icon)
+ main()
+
if __name__ == '__main__':
- main()
\ No newline at end of file
+ main_entry_point()
From 02fb5e734190e6b7bacad39a683909e6ee3ee499 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 11 May 2022 11:18:54 -0400
Subject: [PATCH 004/467] Added a wait_visibility call to fix the Linux
"jumping window" problem.... highly experimental change (thank you chr0nic
for your hard work)
---
PySimpleGUI.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 993e4133..9c11c8ef 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.1 Unreleased"
+version = __version__ = "4.60.0.2 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -8,6 +8,8 @@ _change_log = """
4.60.0.1
main_open_github_issue - prefill the "Details" using the platform module (thank you macdeport!)
Fills Mac, Windows and Linux with details
+ 4.60.0.2
+ Fix for the "jumping window problem on Linux". Major credit to Chr0nic for his amazing "stick with it" work on this problem!
"""
@@ -16822,6 +16824,9 @@ def StartupTK(window):
if not running_mac() or \
(running_mac() and not window.NoTitleBar) or \
(running_mac() and window.NoTitleBar and not _mac_should_apply_notitlebar_patch()):
+
+ if running_linux(): # a fix for the "jumping window" problem introduced by the Linux Windowing manager in 2022
+ root.wait_visibility(root)
root.attributes('-alpha', 0) # hide window while building it. makes for smoother 'paint'
except Exception as e:
print('*** Exception setting alpha channel to zero while creating window ***', e)
From 6267f27f5b15a9d93ef2a44eb52f8ef460658c1f Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Fri, 13 May 2022 09:52:35 -0400
Subject: [PATCH 005/467] Added new Mac Control Panel option to control
accessing the file_types parm in Browse and popup_get_file. Also removed the
previous attempt to fix the Linux "jumping window" problem.
---
PySimpleGUI.py | 90 ++++++++++++++++++++++++++++++++++++++------------
1 file changed, 69 insertions(+), 21 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 9c11c8ef..d155fae7 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.2 Unreleased"
+version = __version__ = "4.60.0.3 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -10,7 +10,11 @@ _change_log = """
Fills Mac, Windows and Linux with details
4.60.0.2
Fix for the "jumping window problem on Linux". Major credit to Chr0nic for his amazing "stick with it" work on this problem!
-
+ 4.60.0.3
+ Removed the previous fix attempt for jumping window on linux
+ Added ability for Mac users to specify file_type in Browse and popup_get_file
+ This feature must be ENABLED by the user in the Mac control panel that can be found in the PySimpleGUI Global Settings
+ The default is this feature is OFF
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -4784,7 +4788,10 @@ class Button(Element):
should_submit_window = False
elif self.BType == BUTTON_TYPE_BROWSE_FILE:
if running_mac():
- file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder) # show the 'get file' dialog box
+ if _mac_allow_filetypes():
+ file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder, filetypes=filetypes) # show the 'get file' dialog box
+ else:
+ file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder) # show the 'get file' dialog box
else:
file_name = tk.filedialog.askopenfilename(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot) # show the 'get file' dialog box
@@ -4800,7 +4807,10 @@ class Button(Element):
self.TKStringVar.set(color)
elif self.BType == BUTTON_TYPE_BROWSE_FILES:
if running_mac():
- file_name = tk.filedialog.askopenfilenames(initialdir=self.InitialFolder)
+ if _mac_allow_filetypes():
+ file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder)
+ else:
+ file_name = tk.filedialog.askopenfilenames(initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot)
@@ -4813,7 +4823,10 @@ class Button(Element):
elif self.BType == BUTTON_TYPE_SAVEAS_FILE:
# show the 'get file' dialog box
if running_mac():
- file_name = tk.filedialog.asksaveasfilename(defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
+ if _mac_allow_filetypes():
+ file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
+ else:
+ file_name = tk.filedialog.asksaveasfilename(defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot)
@@ -16825,8 +16838,8 @@ def StartupTK(window):
(running_mac() and not window.NoTitleBar) or \
(running_mac() and window.NoTitleBar and not _mac_should_apply_notitlebar_patch()):
- if running_linux(): # a fix for the "jumping window" problem introduced by the Linux Windowing manager in 2022
- root.wait_visibility(root)
+ # if running_linux(): # a fix for the "jumping window" problem introduced by the Linux Windowing manager in 2022
+ # root.wait_visibility(root)
root.attributes('-alpha', 0) # hide window while building it. makes for smoother 'paint'
except Exception as e:
print('*** Exception setting alpha channel to zero while creating window ***', e)
@@ -20372,9 +20385,15 @@ def popup_get_file(message, title=None, default_path='', default_extension='', s
# for Macs, setting parent=None fixes a warning problem.
if save_as:
if running_mac():
- filename = tk.filedialog.asksaveasfilename(initialdir=initial_folder,
- initialfile=default_path,
- defaultextension=default_extension) # show the 'get file' dialog box
+ if _mac_allow_filetypes():
+ filename = tk.filedialog.asksaveasfilename(filetypes=file_types,
+ initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get file' dialog box
+ else:
+ filename = tk.filedialog.asksaveasfilename(initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get file' dialog box
else:
filename = tk.filedialog.asksaveasfilename(filetypes=file_types,
initialdir=initial_folder,
@@ -20383,20 +20402,32 @@ def popup_get_file(message, title=None, default_path='', default_extension='', s
defaultextension=default_extension) # show the 'get file' dialog box
elif multiple_files:
if running_mac():
- filename = tk.filedialog.askopenfilenames(initialdir=initial_folder,
- initialfile=default_path,
- defaultextension=default_extension) # show the 'get file' dialog box
+ if _mac_allow_filetypes():
+ filename = tk.filedialog.askopenfilenames(filetypes=file_types,
+ initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get file' dialog box
+ else:
+ filename = tk.filedialog.askopenfilenames(initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get file' dialog box
else:
filename = tk.filedialog.askopenfilenames(filetypes=file_types,
- initialdir=initial_folder,
- initialfile=default_path,
- parent=root,
- defaultextension=default_extension) # show the 'get file' dialog box
+ initialdir=initial_folder,
+ initialfile=default_path,
+ parent=root,
+ defaultextension=default_extension) # show the 'get file' dialog box
else:
if running_mac():
- filename = tk.filedialog.askopenfilename(initialdir=initial_folder,
- initialfile=default_path,
- defaultextension=default_extension) # show the 'get files' dialog box
+ if _mac_allow_filetypes():
+ filename = tk.filedialog.askopenfilename(filetypes=file_types,
+ initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get files' dialog box
+ else:
+ filename = tk.filedialog.askopenfilename(initialdir=initial_folder,
+ initialfile=default_path,
+ defaultextension=default_extension) # show the 'get files' dialog box
else:
filename = tk.filedialog.askopenfilename(filetypes=file_types,
initialdir=initial_folder,
@@ -22263,7 +22294,8 @@ available to make this process more atuomatic.
# Dictionary of Mac Patches. Used to find the key in the global settings and the default value
MAC_PATCH_DICT = {'Enable No Titlebar Patch' : ('-mac feature enable no titlebar patch-', False),
'Disable Modal Windows' : ('-mac feature disable modal windows-', True),
- 'Disable Grab Anywhere with Titlebar' : ('-mac feature disable grab anywhere with titlebar-', True)}
+ 'Disable Grab Anywhere with Titlebar' : ('-mac feature disable grab anywhere with titlebar-', True),
+ 'Enable file_types parm in BrowseFile(s) and popop_get_file (use with caution)' : ('-mac feature enable file_types-', False)}
def _read_mac_global_settings():
"""
@@ -22304,6 +22336,22 @@ def _mac_should_apply_notitlebar_patch():
return False
+def _mac_allow_filetypes():
+ """
+ If running a Mac, then will return True if user has indicated so in the PySimpleGUI Global Settings Window
+
+ :return: True if should file_types parm to be used on the Mac
+ :rtype: (bool)
+ """
+
+ if not running_mac():
+ return False
+
+ enable_filetypes = pysimplegui_user_settings.get('-mac feature enable file_types-', False)
+
+ return enable_filetypes
+
+
def main_mac_feature_control():
"""
From a35687ac51dac5a2a0664ca20e7dd7cba6836c7b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sat, 14 May 2022 15:10:37 -0400
Subject: [PATCH 006/467] Removed old code that used Popen and instead uses the
PySimpleGUI Exec API calls for an all-in-one demo. Added expansion of the
Multilline and a SizeGrip so that it's obvious to user the window is
resizable.
---
.../Demo_Script_Launcher_ANSI_Color_Output.py | 56 ++++++++-----------
1 file changed, 23 insertions(+), 33 deletions(-)
diff --git a/DemoPrograms/Demo_Script_Launcher_ANSI_Color_Output.py b/DemoPrograms/Demo_Script_Launcher_ANSI_Color_Output.py
index 352fddbf..0d037947 100644
--- a/DemoPrograms/Demo_Script_Launcher_ANSI_Color_Output.py
+++ b/DemoPrograms/Demo_Script_Launcher_ANSI_Color_Output.py
@@ -1,12 +1,14 @@
-import subprocess
-import sys
import PySimpleGUI as sg
import re
"""
Demo Program - Realtime output of a shell command in the window using ANSI color codes
Shows how you can run a long-running subprocess and have the output
- be displayed in realtime in the window. The output is assumed to have color codes embedded in it
+ be displayed in realtime in the window. The output is assumed to have color codes embedded in it.
+
+ The commands you enter will be run as shell commands. The output is then shown with the ANSI strings parsed.
+
+ Copyright 2022 PySimpleGUI
"""
@@ -78,50 +80,38 @@ def cut_ansi_string_into_parts(string_with_ansi_codes):
for x in range(0, len(tuple_list)):
if tuple_list[x][0]:
- new_tuple_list += [(tuple_list[x][0], tuple_list[x][1], tuple_list[x][2], tuple_list[x][3])]
+ new_tuple_list += [[tuple_list[x][0], tuple_list[x][1], tuple_list[x][2], tuple_list[x][3]]]
return new_tuple_list
def main():
layout = [
- [sg.Multiline(size=(110, 30), font='courier 10', background_color='black', text_color='white', key='-MLINE-')],
+ [sg.Multiline(size=(110, 30), font='courier 10', background_color='black', text_color='white', key='-MLINE-', expand_x=True, expand_y=True)],
[sg.T('Promt> '), sg.Input(key='-IN-', focus=True, do_not_clear=False)],
- [sg.Button('Run', bind_return_key=True), sg.Button('Exit')]]
+ [sg.Button('Run', bind_return_key=True), sg.Button('Exit'), sg.Sizegrip()]]
- window = sg.Window('Realtime Shell Command Output', layout)
+ window = sg.Window('Realtime Shell Command Output', layout, resizable=True)
while True: # Event Loop
event, values = window.read()
- # print(event, values)
if event in (sg.WIN_CLOSED, 'Exit'):
break
elif event == 'Run':
- runCommand(cmd=values['-IN-'], window=window)
+ args = values['-IN-'].split(' ')
+ p = sg.execute_command_subprocess(args[0], *args[1:], wait=False, pipe_output=True, merge_stderr_with_stdout=True )
+ lines = sg.execute_get_results(p)
+
+ for line in lines:
+ if line is None:
+ continue
+ ansi_list = cut_ansi_string_into_parts(line)
+ for ansi_item in ansi_list:
+ if ansi_item[1] == 'Reset':
+ ansi_item[1] = None
+ window['-MLINE-'].update(ansi_item[0] , text_color_for_value=ansi_item[1], background_color_for_value=ansi_item[2], append=True, autoscroll=True)
+ window.refresh()
+
window.close()
-
-def runCommand(cmd, timeout=None, window=None):
- """ run shell command
- @param cmd: command to execute
- @param timeout: timeout for command execution
- @param window: the PySimpleGUI window that the output is going to (needed to do refresh on)
- @return: (return code from command, command output)
- """
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- for line in p.stdout:
- line = line.decode(errors='replace' if (sys.version_info) < (3, 5) else 'backslashreplace').rstrip()
- ansi_list = cut_ansi_string_into_parts(line)
- for ansi_item in ansi_list:
- if ansi_item[1] == 'Reset':
- ansi_item[1] = None
- window['-MLINE-'].update(ansi_item[0] + '\n', text_color_for_value=ansi_item[1], background_color_for_value=ansi_item[2], append=True,
- autoscroll=True)
- window.refresh()
-
- retval = p.wait(timeout)
- return retval
-
-
-sg.theme('Dark Blue 3')
main()
From 303c3c0ad21c11e650dbc94e98338a0e8b0ff970 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 15 May 2022 12:39:31 -0400
Subject: [PATCH 007/467] New Window location parameter value of None will
cause NO location to be set for the window. The OS will decide. It's to
help with the GNOME window manager issue
---
PySimpleGUI.py | 72 ++++++++++++++++++++++++++++----------------------
1 file changed, 41 insertions(+), 31 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index d155fae7..aeaaca29 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.3 Unreleased"
+version = __version__ = "4.60.0.4 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -15,6 +15,9 @@ _change_log = """
Added ability for Mac users to specify file_type in Browse and popup_get_file
This feature must be ENABLED by the user in the Mac control panel that can be found in the PySimpleGUI Global Settings
The default is this feature is OFF
+ 4.60.0.4
+ New location parameter option for Windows. Setting location=None tells PySimpleGUI to not set any location when window is created. It's up to the OS to decide.
+ The docstring for Window has been changed, but not all the other places (like popup). Want to make sure this works before making all those changes.
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -9370,8 +9373,8 @@ class Window:
:type auto_size_buttons: (bool)
:param relative_location: (x,y) location relative to the default location of the window, in pixels. Normally the window centers. This location is relative to the location the window would be created. Note they can be negative.
:type relative_location: (int, int)
- :param location: (x,y) location, in pixels, to locate the upper left corner of the window on the screen. Default is to center on screen.
- :type location: (int, int)
+ :param location: (x,y) location, in pixels, to locate the upper left corner of the window on the screen. Default is to center on screen. None will not set any location meaning the OS will decide
+ :type location: (int, int) or None
:param size: (width, height) size in pixels for this window. Normally the window is autosized to fit contents, not set to an absolute size by the user. Try not to set this value. You risk, the contents being cut off, etc. Let the layout determine the window size instead
:type size: (int, int)
:param element_padding: Default amount of padding to put around elements in window (left/right, top/bottom) or ((left, right), (top, bottom)), or an int. If an int, then it's converted into a tuple (int, int)
@@ -16768,35 +16771,42 @@ def _convert_window_to_tk(window):
master.geometry("%sx%s" % (window._Size[0], window._Size[1]))
screen_width = master.winfo_screenwidth() # get window info to move to middle of screen
screen_height = master.winfo_screenheight()
- if window.Location != (None, None):
- x, y = window.Location
- elif DEFAULT_WINDOW_LOCATION != (None, None):
- x, y = DEFAULT_WINDOW_LOCATION
+ if window.Location is not None:
+ if window.Location != (None, None):
+ x, y = window.Location
+ elif DEFAULT_WINDOW_LOCATION != (None, None):
+ x, y = DEFAULT_WINDOW_LOCATION
+ else:
+ master.update_idletasks() # don't forget to do updates or values are bad
+ win_width = master.winfo_width()
+ win_height = master.winfo_height()
+ x = screen_width / 2 - win_width / 2
+ y = screen_height / 2 - win_height / 2
+ if y + win_height > screen_height:
+ y = screen_height - win_height
+ if x + win_width > screen_width:
+ x = screen_width - win_width
+
+ if window.RelativeLoction != (None, None):
+ x += window.RelativeLoction[0]
+ y += window.RelativeLoction[1]
+
+ move_string = '+%i+%i' % (int(x), int(y))
+ master.geometry(move_string)
+ window.config_last_location = (int(x), (int(y)))
+ window.TKroot.x = int(x)
+ window.TKroot.y = int(y)
+ window.starting_window_position = (int(x), (int(y)))
+ master.update_idletasks() # don't forget
+ master.geometry(move_string)
+ master.update_idletasks() # don't forget
else:
- master.update_idletasks() # don't forget to do updates or values are bad
- win_width = master.winfo_width()
- win_height = master.winfo_height()
- x = screen_width / 2 - win_width / 2
- y = screen_height / 2 - win_height / 2
- if y + win_height > screen_height:
- y = screen_height - win_height
- if x + win_width > screen_width:
- x = screen_width - win_width
-
- if window.RelativeLoction != (None, None):
- x += window.RelativeLoction[0]
- y += window.RelativeLoction[1]
-
- move_string = '+%i+%i' % (int(x), int(y))
- master.geometry(move_string)
- window.config_last_location = (int(x), (int(y)))
- window.TKroot.x = int(x)
- window.TKroot.y = int(y)
- window.starting_window_position = (int(x), (int(y)))
- master.update_idletasks() # don't forget
- master.geometry(move_string)
- master.update_idletasks() # don't forget
-
+ master.update_idletasks()
+ x, y = int(master.winfo_x()), int(master.winfo_y())
+ window.config_last_location = x,y
+ window.TKroot.x = x
+ window.TKroot.y = y
+ window.starting_window_position = x,y
_no_titlebar_setup(window)
return
From 6ad6d6583f3f64a802de73cdd15a7d6105602b8b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Mon, 16 May 2022 06:08:06 -0400
Subject: [PATCH 008/467] Added Trinket specific code for Title and Menubar.
Compressed entire window just a tad to fit better onto small screens/Trinket
---
DemoPrograms/Demo_All_Elements_Simple.py | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/DemoPrograms/Demo_All_Elements_Simple.py b/DemoPrograms/Demo_All_Elements_Simple.py
index fffe50ed..40870c46 100644
--- a/DemoPrograms/Demo_All_Elements_Simple.py
+++ b/DemoPrograms/Demo_All_Elements_Simple.py
@@ -8,7 +8,8 @@ import PySimpleGUI as sg
Copyright 2022 PySimpleGUI
"""
-use_custom_titlebar = False
+
+use_custom_titlebar = True if sg.running_trinket() else False
def make_window(theme=None):
@@ -50,7 +51,7 @@ def make_window(theme=None):
[name('Image'), sg.Image(sg.EMOJI_BASE64_HAPPY_THUMBS_UP)],
[name('Graph'), sg.Graph((125, 50), (0,0), (125,50), k='-GRAPH-')] ]
- layout_r = [[name('Canvas'), sg.Canvas(background_color=sg.theme_button_color()[1], size=(125,50))],
+ layout_r = [[name('Canvas'), sg.Canvas(background_color=sg.theme_button_color()[1], size=(125,40))],
[name('ProgressBar'), sg.ProgressBar(100, orientation='h', s=(10,20), k='-PBAR-')],
[name('Table'), sg.Table([[1,2,3], [4,5,6]], ['Col 1','Col 2','Col 3'], num_rows=2)],
[name('Tree'), sg.Tree(treedata, ['Heading',], num_rows=3)],
@@ -68,9 +69,9 @@ def make_window(theme=None):
# Note - LOCAL Menu element is used (see about for how that's defined)
layout = [[Menu([['File', ['Exit']], ['Edit', ['Edit Me', ]]], k='-CUST MENUBAR-',p=0)],
- [sg.Checkbox('Use Custom Titlebar & Menubar', sg.theme_use_custom_titlebar(), enable_events=True, k='-USE CUSTOM TITLEBAR-')],
- [sg.T('PySimpleGUI Elements - Use Combo to Change Themes', font='_ 18', justification='c', expand_x=True)],
- [sg.Col(layout_l), sg.Col(layout_r)]]
+ [sg.T('PySimpleGUI Elements - Use Combo to Change Themes', font='_ 14', justification='c', expand_x=True)],
+ [sg.Checkbox('Use Custom Titlebar & Menubar', use_custom_titlebar, enable_events=True, k='-USE CUSTOM TITLEBAR-', p=0)],
+ [sg.Col(layout_l, p=0), sg.Col(layout_r, p=0)]]
window = sg.Window('The PySimpleGUI Element List', layout, finalize=True, right_click_menu=sg.MENU_RIGHT_CLICK_EDITME_VER_EXIT, keep_on_top=True, use_custom_titlebar=use_custom_titlebar)
From 0ecc48f4f7fbb6fd4a7a975bd24da656fc4a00c1 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 19 May 2022 16:25:42 -0400
Subject: [PATCH 009/467] Show an error if None is specified as values
parameter in Listbox element
---
PySimpleGUI.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index aeaaca29..fbd0fa79 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.4 Unreleased"
+version = __version__ = "4.60.0.5 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -18,6 +18,8 @@ _change_log = """
4.60.0.4
New location parameter option for Windows. Setting location=None tells PySimpleGUI to not set any location when window is created. It's up to the OS to decide.
The docstring for Window has been changed, but not all the other places (like popup). Want to make sure this works before making all those changes.
+ 4.60.0.5
+ Added check for None invalid values parm when creating a Listbox element
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -2500,6 +2502,9 @@ class Listbox(Element):
:type metadata: (Any)
"""
+ if values is None:
+ _error_popup_with_traceback('Error in your Listbox definition - The values parameter cannot be None', 'Use an empty list if you want no values in your Listbox')
+
self.Values = values
self.DefaultValues = default_values
self.TKListbox = None
From 48bb8fe24c82bfce1437f33d9631ee18140aac8b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 19 May 2022 16:38:05 -0400
Subject: [PATCH 010/467] Added a reminder to call contents_changed to the
Column docstring
---
PySimpleGUI.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index fbd0fa79..00570d52 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.5 Unreleased"
+version = __version__ = "4.60.0.6 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -20,6 +20,8 @@ _change_log = """
The docstring for Window has been changed, but not all the other places (like popup). Want to make sure this works before making all those changes.
4.60.0.5
Added check for None invalid values parm when creating a Listbox element
+ 4.60.0.6
+ Column docstring changed to add reminder to call contents_changed if changing the contents of a scrollable column
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -7758,7 +7760,7 @@ class Column(Element):
:type pad: (int, int) or ((int, int),(int,int)) or (int,(int,int)) or ((int, int),int) | int
:param p: Same as pad parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, pad will be used
:type p: (int, int) or ((int, int),(int,int)) or (int,(int,int)) or ((int, int),int) | int
- :param scrollable: if True then scrollbars will be added to the column
+ :param scrollable: if True then scrollbars will be added to the column. If you update the contents of a scrollable column, be sure and call Column.contents_changed also
:type scrollable: (bool)
:param vertical_scroll_only: if Truen then no horizontal scrollbar will be shown
:type vertical_scroll_only: (bool)
From b85ad8e12a58e6e1484f96c20be28eedcd4fa941 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 19 May 2022 17:46:54 -0400
Subject: [PATCH 011/467] Fix for crash when specifying horizontal scroll in
Listbox element
---
PySimpleGUI.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 00570d52..8d47af38 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.6 Unreleased"
+version = __version__ = "4.60.0.7 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -22,6 +22,8 @@ _change_log = """
Added check for None invalid values parm when creating a Listbox element
4.60.0.6
Column docstring changed to add reminder to call contents_changed if changing the contents of a scrollable column
+ 4.60.0.7
+ Fixed crash when horizontal_scroll=True for Listbox element
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -15572,7 +15574,6 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# Horizontal scrollbar
if element.HorizontalScroll:
- element.TKText.config(wrap='none')
_make_ttk_scrollbar(element, 'h', toplevel_form)
element.hsb.pack(side=tk.BOTTOM, fill='x')
element.Widget.configure(xscrollcommand=element.hsb.set)
From 562eb86fbcf89735ca87c90275e739b7841b954a Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Fri, 20 May 2022 15:25:11 -0400
Subject: [PATCH 012/467] Added readonly to Input.update - note to be careful
with disable too
---
PySimpleGUI.py | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 8d47af38..d8ce1d66 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.7 Unreleased"
+version = __version__ = "4.60.0.8 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -24,6 +24,8 @@ _change_log = """
Column docstring changed to add reminder to call contents_changed if changing the contents of a scrollable column
4.60.0.7
Fixed crash when horizontal_scroll=True for Listbox element
+ 4.60.0.8
+ Added readonly to Input.update
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -1975,7 +1977,7 @@ class Input(Element):
super().__init__(ELEM_TYPE_INPUT_TEXT, size=sz, background_color=bg, text_color=fg, key=key, pad=pad,
font=font, tooltip=tooltip, visible=visible, metadata=metadata)
- def update(self, value=None, disabled=None, select=None, visible=None, text_color=None, background_color=None, move_cursor_to='end', password_char=None, paste=None):
+ def update(self, value=None, disabled=None, select=None, visible=None, text_color=None, background_color=None, move_cursor_to='end', password_char=None, paste=None, readonly=None):
"""
Changes some of the settings for the Input Element. Must call `Window.Read` or `Window.Finalize` prior.
Changes will not be visible in your window until you call window.read or window.refresh.
@@ -2002,6 +2004,8 @@ class Input(Element):
:type password_char: str
:param paste: If True "Pastes" the value into the element rather than replacing the entire element. If anything is selected it is replaced. The text is inserted at the current cursor location.
:type paste: bool
+ :param readonly: if True make element readonly (user cannot change any choices). Enables the element if either choice are made.
+ :type readonly: (bool)
"""
if not self._widget_was_created(): # if widget hasn't been created yet, then don't allow
return
@@ -2011,6 +2015,13 @@ class Input(Element):
self.TKEntry['state'] = 'readonly' if self.ReadOnly else 'normal'
self.Disabled = disabled if disabled is not None else self.Disabled
+ if readonly is True:
+ self.TKEntry['state'] = 'readonly'
+ elif readonly is False:
+ self.TKEntry['state'] = 'normal'
+
+
+
if background_color not in (None, COLOR_SYSTEM_DEFAULT):
self.TKEntry.configure(background=background_color)
if text_color not in (None, COLOR_SYSTEM_DEFAULT):
From 8a8ae3df1534bc9c6246adadbf95d24e5f255f47 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sat, 21 May 2022 06:57:21 -0400
Subject: [PATCH 013/467] Addition of Push and element_justification Recipes
---
docs/cookbook.md | 82 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)
diff --git a/docs/cookbook.md b/docs/cookbook.md
index ca971cad..f0a3f558 100644
--- a/docs/cookbook.md
+++ b/docs/cookbook.md
@@ -1710,6 +1710,88 @@ while True:
----------
+# Recipe - Clean Simple Inputs
+
+## Single Line Inputs
+
+Many of our first GUIs involve collecting small bits of information and then continuing on with processing that input. They are simple programs that are quick for beginners to knock out and get a few accomplishments so their confidence builds.
+
+The most basic of these are layouts that have a `Text` Element and an `Input` Element. This is a basic "form" the user fills out. Maybe you've got code that looks like this already.
+
+```python
+import PySimpleGUI as sg
+
+layout = [ [sg.Text('Name'), sg.Input(key='-NAME-')],
+ [sg.Text('Address'), sg.Input(key='-ADDRESS-')],
+ [sg.Text('City and State'), sg.Input(key='-CITY AND STATE-')],
+ [sg.Ok(), sg.Cancel()]]
+
+window = sg.Window('Simple Inputs', layout)
+
+while True:
+ event, values = window.read()
+ if event == sg.WIN_CLOSED or event == 'Cancel':
+ break
+
+window.close()
+```
+
+
+
+
+
+## `Push` Your `Input` Rows
+
+One easy addition to your layout is to "push" each input row to the right. The effect is quite nice and the implementation involves one simple operation - add a `Push` element to the start of each row that has an `Input`
+
+The change looks like this:
+
+```python
+import PySimpleGUI as sg
+
+layout = [ [sg.Push(), sg.Text('Name'), sg.Input(key='-NAME-')],
+ [sg.Push(), sg.Text('Address'), sg.Input(key='-ADDRESS-')],
+ [sg.Push(), sg.Text('City and State'), sg.Input(key='-CITY AND STATE-')],
+ [sg.Ok(), sg.Cancel()]]
+
+window = sg.Window('Simple Inputs', layout)
+
+while True:
+ event, values = window.read()
+ if event == sg.WIN_CLOSED or event == 'Cancel':
+ break
+
+window.close()
+
+```
+
+And the result is surprisingly pleasant.
+
+
+
+## Push Everything - `element_justification='r'`
+
+If you really want to get clever and save time as well, you can make a 1-parameter change to your `Window` definition and get a similar result. The one difference is that the buttons will also get pushed over.
+
+```python
+import PySimpleGUI as sg
+
+layout = [ [sg.Text('Name'), sg.Input(key='-NAME-')],
+ [sg.Text('Address'), sg.Input(key='-ADDRESS-')],
+ [sg.Text('City and State'), sg.Input(key='-CITY AND STATE-')],
+ [sg.Ok(), sg.Cancel()]]
+
+window = sg.Window('Simple Inputs', layout, element_justification='r')
+
+while True:
+ event, values = window.read()
+ if event == sg.WIN_CLOSED or event == 'Cancel':
+ break
+
+window.close()
+```
+
+
From 9f87cdbb25714ac8388d6b39bbd3ce8a3c5f5ba8 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 22 May 2022 15:52:09 -0400
Subject: [PATCH 014/467] 4.60.1 patch release added to release notes
---
docs/call reference.md | 2 --
docs/index.md | 4 ++++
readme_creator/markdown input files/4_Release_notes.md | 4 ++++
readme_creator/markdown input files/5_call_reference.md | 2 --
readme_creator/output/call reference.md | 2 --
readme_creator/output/index.md | 4 ++++
6 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/docs/call reference.md b/docs/call reference.md
index 898e542a..898641dd 100644
--- a/docs/call reference.md
+++ b/docs/call reference.md
@@ -7583,8 +7583,6 @@ Parameter Descriptions:
|--|--|--|
| str | tooltip_text | the text to show in tooltip. |
-### TKOut
-
### Update
Changes some of the settings for the Multiline Element. Must call `Window.Read` or `Window.Finalize` prior
diff --git a/docs/index.md b/docs/index.md
index 132e4406..6a9cd999 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -10164,6 +10164,10 @@ Test Harness and Settings Windows fit on small screens better
* Auto-correct file_types problems for Browse buttons. Automatically change the formatting from (str, str) to ((str, str),) and warns the user
* Docstring typo fixes for file_types parm
+## 4.60.1 PySimpleGUI 22-May-2022
+
+* A patch-release that fixes crash if `horizontal_scrollbar=True` when making a `Listbox` element
+
## Code Condition
Make it run
diff --git a/readme_creator/markdown input files/4_Release_notes.md b/readme_creator/markdown input files/4_Release_notes.md
index 18766c25..d2898dd5 100644
--- a/readme_creator/markdown input files/4_Release_notes.md
+++ b/readme_creator/markdown input files/4_Release_notes.md
@@ -2574,6 +2574,10 @@ Test Harness and Settings Windows fit on small screens better
* Auto-correct file_types problems for Browse buttons. Automatically change the formatting from (str, str) to ((str, str),) and warns the user
* Docstring typo fixes for file_types parm
+## 4.60.1 PySimpleGUI 22-May-2022
+
+* A patch-release that fixes crash if `horizontal_scrollbar=True` when making a `Listbox` element
+
## Code Condition
diff --git a/readme_creator/markdown input files/5_call_reference.md b/readme_creator/markdown input files/5_call_reference.md
index 693fcfe3..1d9f56ed 100644
--- a/readme_creator/markdown input files/5_call_reference.md
+++ b/readme_creator/markdown input files/5_call_reference.md
@@ -1665,8 +1665,6 @@ The following methods are here for backwards compatibility reference. You will
### SetTooltip
-### TKOut
-
### Update
diff --git a/readme_creator/output/call reference.md b/readme_creator/output/call reference.md
index 898e542a..898641dd 100644
--- a/readme_creator/output/call reference.md
+++ b/readme_creator/output/call reference.md
@@ -7583,8 +7583,6 @@ Parameter Descriptions:
|--|--|--|
| str | tooltip_text | the text to show in tooltip. |
-### TKOut
-
### Update
Changes some of the settings for the Multiline Element. Must call `Window.Read` or `Window.Finalize` prior
diff --git a/readme_creator/output/index.md b/readme_creator/output/index.md
index 132e4406..6a9cd999 100644
--- a/readme_creator/output/index.md
+++ b/readme_creator/output/index.md
@@ -10164,6 +10164,10 @@ Test Harness and Settings Windows fit on small screens better
* Auto-correct file_types problems for Browse buttons. Automatically change the formatting from (str, str) to ((str, str),) and warns the user
* Docstring typo fixes for file_types parm
+## 4.60.1 PySimpleGUI 22-May-2022
+
+* A patch-release that fixes crash if `horizontal_scrollbar=True` when making a `Listbox` element
+
## Code Condition
Make it run
From 1f5fb16bc40d6390d3ad81815a25cde7b1585c7c Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Tue, 24 May 2022 06:23:43 -0400
Subject: [PATCH 015/467] Addition of Window.set_resizable
---
PySimpleGUI.py | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index d8ce1d66..8da37055 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.8 Unreleased"
+version = __version__ = "4.60.0.9 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -26,6 +26,8 @@ _change_log = """
Fixed crash when horizontal_scroll=True for Listbox element
4.60.0.8
Added readonly to Input.update
+ 4.60.0.9
+ Added Window.set_resizable - can change the X and Y axis resizing after window is created
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -11262,6 +11264,25 @@ class Window:
self.TKroot.minsize(size[0], size[1])
self.TKroot.update_idletasks()
+
+ def set_resizable(self, x_axis_enable, y_axis_enable):
+ """
+ Changes if a window can be resized in either the X or the Y direction.
+ Note Window must be read or finalized first.
+
+ :param x_axis_enable: If True, the window can be changed in the X-axis direction. If False, it cannot
+ :type x_axis_enable: (bool)
+ :param y_axis_enable: If True, the window can be changed in the Y-axis direction. If False, it cannot
+ :type y_axis_enable: (bool)
+ """
+
+ if not self._is_window_created('tried Window.set_resixable'):
+ return
+ try:
+ self.TKroot.resizable(x_axis_enable, y_axis_enable)
+ except Exception as e:
+ _error_popup_with_traceback('Window.set_resizable - tkinter reported error', e)
+
def visibility_changed(self):
"""
When making an element in a column or someplace that has a scrollbar, then you'll want to call this function
From 84cf2611c0ff6d397cb3123b708cdb19fd950411 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 26 May 2022 05:23:31 -0400
Subject: [PATCH 016/467] Added wrap parameter to the Spin element, added
temporary code for a verification feature
---
PySimpleGUI.py | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 8da37055..7ddf3fba 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.9 Unreleased"
+version = __version__ = "4.60.0.10 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -28,6 +28,9 @@ _change_log = """
Added readonly to Input.update
4.60.0.9
Added Window.set_resizable - can change the X and Y axis resizing after window is created
+ 4.60.0.10
+ Added wrap parameter to Spin element - if True, wraps back to the first value when at the end
+ Temp test code added for a new verification feature
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -166,6 +169,7 @@ import calendar
import datetime
import textwrap
+import hashlib
import inspect
import traceback
import difflib
@@ -3087,7 +3091,7 @@ class Spin(Element):
"""
def __init__(self, values, initial_value=None, disabled=False, change_submits=False, enable_events=False, readonly=False,
- size=(None, None), s=(None, None), auto_size_text=None, bind_return_key=None, font=None, background_color=None, text_color=None, key=None, k=None, pad=None, p=None,
+ size=(None, None), s=(None, None), auto_size_text=None, bind_return_key=None, font=None, background_color=None, text_color=None, key=None, k=None, pad=None, p=None, wrap=None,
tooltip=None, right_click_menu=None, expand_x=False, expand_y=False, visible=True, metadata=None):
"""
:param values: List of valid values
@@ -3124,6 +3128,8 @@ class Spin(Element):
:type pad: (int, int) or ((int, int),(int,int)) or (int,(int,int)) or ((int, int),int) | int
:param p: Same as pad parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, pad will be used
:type p: (int, int) or ((int, int),(int,int)) or (int,(int,int)) or ((int, int),int) | int
+ :param wrap: Determines if the values should "Wrap". Default is False. If True, when reaching last value, will continue back to the first value.
+ :type wrap: (bool)
:param tooltip: text, that will appear when mouse hovers over the element
:type tooltip: (str)
:param right_click_menu: A list of lists of Menu items to show when this element is right clicked. See user docs for exact format.
@@ -3147,6 +3153,7 @@ class Spin(Element):
self.Readonly = readonly
self.RightClickMenu = right_click_menu
self.BindReturnKey = bind_return_key
+ self.wrap = wrap
bg = background_color if background_color else DEFAULT_INPUT_ELEMENTS_COLOR
fg = text_color if text_color is not None else DEFAULT_INPUT_TEXT_COLOR
@@ -15876,6 +15883,8 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element.TKSpinBox.configure(background=element.BackgroundColor)
element.TKSpinBox.configure(buttonbackground=element.BackgroundColor)
element.Widget.config(highlightthickness=0)
+ if element.wrap is True:
+ element.Widget.configure(wrap=True)
expand, fill, row_should_expand, row_fill_direction = _add_expansion(element, row_should_expand, row_fill_direction)
element.TKSpinBox.pack(side=tk.LEFT, padx=elementpad[0], pady=elementpad[1], expand=expand, fill=fill)
if element.visible is False:
@@ -23084,6 +23093,14 @@ def get_versions():
return versions
+def self_check_hash():
+ with open(__file__, "r",encoding="utf8") as file:
+ lines_in_file = file.readlines()
+ combined_lines = '\n'.join(lines_in_file[:-1])
+ entire_file_bytes = bytearray(combined_lines, encoding='utf8')
+ curfile_hash = hashlib.sha256(entire_file_bytes)
+ return curfile_hash.hexdigest()
+
# ==================================================#
#
# MM""""""""`M oo oo
@@ -24215,7 +24232,12 @@ def main_global_pysimplegui_settings():
Combo([''] + theme_list(), settings.get('-theme-', None), readonly=True, k='-THEME-', tooltip=tooltip_theme), Checkbox('Always use custom Titlebar', default=pysimplegui_user_settings.get('-custom titlebar-',False), k='-CUSTOM TITLEBAR-')]],
font='_ 16', expand_x=True)
- settings_tab_group = TabGroup([[theme_tab, ttk_tab, interpreter_tab, explorer_tab, editor_tab, snapshots_tab ]])
+ # ------------------------- Security Tab -------------------------
+ security_tab = Tab('Security',
+ [[T('PySimpleGUI hashcode')], [T(self_check_hash())]],
+ expand_x=True)
+
+ settings_tab_group = TabGroup([[theme_tab, ttk_tab, interpreter_tab, explorer_tab, editor_tab, snapshots_tab, security_tab ]])
layout += [[settings_tab_group]]
# [T('Buttons (Leave Unchecked To Use Default) NOT YET IMPLEMENTED!', font='_ 16')],
# [Checkbox('Always use TTK buttons'), CBox('Always use TK Buttons')],
@@ -24589,7 +24611,7 @@ def _create_main_window():
# [ProgressBar(100, bar_color=('red', 'green'), orientation='h')],
[Listbox(['Listbox 1', 'Listbox 2', 'Listbox 3'], select_mode=SELECT_MODE_EXTENDED, size=(20, 5), no_scrollbar=True),
- Spin([1, 2, 3, 'a', 'b', 'c'], initial_value='a', size=(4, 3))],
+ Spin([1, 2, 3, 'a', 'b', 'c'], initial_value='a', size=(4, 3), wrap=True)],
[Combo(['Combo item %s' % i for i in range(5)], size=(20, 3), default_value='Combo item 2', key='-COMBO1-', )],
[Combo(['Combo item %s' % i for i in range(5)], size=(20, 3), font='Courier 14', default_value='Combo item 2', key='-COMBO2-', )],
# [Combo(['Combo item 1', 2,3,4], size=(20, 3), readonly=False, text_color='blue', background_color='red', key='-COMBO2-')],
@@ -24949,4 +24971,5 @@ if __name__ == '__main__':
main_sdk_help()
exit(0)
main()
- exit(0)
\ No newline at end of file
+ exit(0)
+def get_signature(): return b'&\xd4R\x03.\xb1T\xab9\xb1\x03\x1b.\xae\x054\xf1\xcd_3\xb2\xc5\xb5\xc4i\xc7\t\x16\x7f:\xdb\xea\xe9\xbf\x80\x81\xae_C\xc7\xe3\x18$\xf7\x03\xe83A\xcc\xd3)\x8cA\xcf\xcf\xdcnr\xf3\x91\xa6q\x88\xde\x13\xb7N\xa7\xb0\xbf\x04\xb5\\\x03\x813\x9a\x1e\x07a\xe6\x1c\x13j\xe0\x15\xd5\xc4\x90\xc3\x1a\x80\xff\xc6\xe6\xed\xe3=\r\x98Y\xf2\x90\rPF?\x1d\xbc\xd9c\x82\xca?\xc5\x8c\x9f\x01q\xb8\xdf\xc3\xc1\xd4\x9e\xb6H\xa1'
\ No newline at end of file
From 544e38be13aeb4ae1fc7771594081229c4303a39 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 26 May 2022 05:38:41 -0400
Subject: [PATCH 017/467] Fixed Spin element docstring - readonly was incorrect
---
PySimpleGUI.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 7ddf3fba..8085a772 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.10 Unreleased"
+version = __version__ = "4.60.0.11 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -31,6 +31,8 @@ _change_log = """
4.60.0.10
Added wrap parameter to Spin element - if True, wraps back to the first value when at the end
Temp test code added for a new verification feature
+ 4.60.0.11
+ Fixed Spin Element docstring - readonly was not correct
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -3104,7 +3106,7 @@ class Spin(Element):
:type change_submits: (bool)
:param enable_events: Turns on the element specific events. Spin events happen when an item changes
:type enable_events: (bool)
- :param readonly: Turns on the element specific events. Spin events happen when an item changes
+ :param readonly: If True, then users cannot type in values. Only values from the values list are allowed.
:type readonly: (bool)
:param size: (w, h) w=characters-wide, h=rows-high. If an int instead of a tuple is supplied, then height is auto-set to 1
:type size: (int, int) | (None, None) | int
From 495dd3988de5f7de055d66dd11a8b7dc851a74f4 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Fri, 27 May 2022 09:06:58 -0400
Subject: [PATCH 018/467] Addition of wrap_lines to Multiline element.
Addition of wrap_lines and hotizontal_scroll to Output element
---
PySimpleGUI.py | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 8085a772..a63caa71 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.11 Unreleased"
+version = __version__ = "4.60.0.12 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -33,6 +33,9 @@ _change_log = """
Temp test code added for a new verification feature
4.60.0.11
Fixed Spin Element docstring - readonly was not correct
+ 4.60.0.12
+ Output element - addition of wrap_lines and horizontal_scroll parameters
+ Multiline element - addition of wrap_lines parameter
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -3286,7 +3289,7 @@ class Multiline(Element):
def __init__(self, default_text='', enter_submits=False, disabled=False, autoscroll=False, border_width=None,
size=(None, None), s=(None, None), auto_size_text=None, background_color=None, text_color=None, horizontal_scroll=False, change_submits=False,
- enable_events=False, do_not_clear=True, key=None, k=None, write_only=False, auto_refresh=False, reroute_stdout=False, reroute_stderr=False, reroute_cprint=False, echo_stdout_stderr=False, focus=False, font=None, pad=None, p=None, tooltip=None, justification=None, no_scrollbar=False,
+ enable_events=False, do_not_clear=True, key=None, k=None, write_only=False, auto_refresh=False, reroute_stdout=False, reroute_stderr=False, reroute_cprint=False, echo_stdout_stderr=False, focus=False, font=None, pad=None, p=None, tooltip=None, justification=None, no_scrollbar=False, wrap_lines=None,
sbar_trough_color=None, sbar_background_color=None, sbar_arrow_color=None, sbar_width=None, sbar_arrow_width=None, sbar_frame_color=None, sbar_relief=None,
expand_x=False, expand_y=False, rstrip=True, right_click_menu=None, visible=True, metadata=None):
"""
@@ -3348,6 +3351,8 @@ class Multiline(Element):
:type justification: (str)
:param no_scrollbar: If False then a vertical scrollbar will be shown (the default)
:type no_scrollbar: (bool)
+ :param wrap_lines: If True, the lines will be wrapped automatically. Other parms affect this setting, but this one will override them all. Default is it does nothing and uses previous settings for wrapping.
+ :type wrap_lines: (bool)
:param sbar_trough_color: Scrollbar color of the trough
:type sbar_trough_color: (str)
:param sbar_background_color: Scrollbar color of the background of the arrow buttons at the ends AND the color of the "thumb" (the thing you grab and slide). Switches to arrow color when mouse is over
@@ -3406,6 +3411,7 @@ class Multiline(Element):
self.expand_x = expand_x
self.expand_y = expand_y
self.rstrip = rstrip
+ self.wrap_lines = wrap_lines
if reroute_stdout:
self.reroute_stdout_to_here()
if reroute_stderr:
@@ -4383,7 +4389,7 @@ class Output(Multiline):
"""
def __init__(self, size=(None, None), s=(None, None), background_color=None, text_color=None, pad=None, p=None, echo_stdout_stderr=False, font=None, tooltip=None,
- key=None, k=None, right_click_menu=None, expand_x=False, expand_y=False, visible=True, metadata=None,
+ key=None, k=None, right_click_menu=None, expand_x=False, expand_y=False, visible=True, metadata=None, wrap_lines=None, horizontal_scroll=None,
sbar_trough_color=None, sbar_background_color=None, sbar_arrow_color=None, sbar_width=None, sbar_arrow_width=None, sbar_frame_color=None, sbar_relief=None):
"""
:param size: (w, h) w=characters-wide, h=rows-high. If an int instead of a tuple is supplied, then height is auto-set to 1
@@ -4418,6 +4424,10 @@ class Output(Multiline):
:type visible: (bool)
:param metadata: User metadata that can be set to ANYTHING
:type metadata: (Any)
+ :param wrap_lines: If True, the lines will be wrapped automatically. Other parms affect this setting, but this one will override them all. Default is it does nothing and uses previous settings for wrapping.
+ :type wrap_lines: (bool)
+ :param horizontal_scroll: Controls if a horizontal scrollbar should be shown. If True, then line wrapping will be off by default
+ :type horizontal_scroll: (bool)
:param sbar_trough_color: Scrollbar color of the trough
:type sbar_trough_color: (str)
:param sbar_background_color: Scrollbar color of the background of the arrow buttons at the ends AND the color of the "thumb" (the thing you grab and slide). Switches to arrow color when mouse is over
@@ -4446,7 +4456,7 @@ class Output(Multiline):
# self.expand_x = expand_x
# self.expand_y = expand_y
- super().__init__(size=size, s=s, background_color=background_color, text_color=text_color, pad=pad, p=p, echo_stdout_stderr=echo_stdout_stderr, font=font, tooltip=tooltip,
+ super().__init__(size=size, s=s, background_color=background_color, text_color=text_color, pad=pad, p=p, echo_stdout_stderr=echo_stdout_stderr, font=font, tooltip=tooltip, wrap_lines=wrap_lines, horizontal_scroll=horizontal_scroll,
key=key, k=k, right_click_menu=right_click_menu, write_only=True, reroute_stdout=True, reroute_stderr=True, autoscroll=True, expand_x=expand_x, expand_y=expand_y, visible=visible, metadata=metadata,
sbar_trough_color=sbar_trough_color, sbar_background_color=sbar_background_color, sbar_arrow_color=sbar_arrow_color, sbar_width=sbar_width, sbar_arrow_width=sbar_arrow_width, sbar_frame_color=sbar_frame_color, sbar_relief=sbar_relief)
#
@@ -15691,6 +15701,11 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
else:
element.TKText.config(wrap='word')
+ if element.wrap_lines is True:
+ element.TKText.config(wrap='word')
+ elif element.wrap_lines is False:
+ element.TKText.config(wrap='none')
+
if not element.no_scrollbar or element.HorizontalScroll:
# Chr0nic
element.TKText.bind("", lambda event, em=element: testMouseHook(em))
@@ -24973,5 +24988,5 @@ if __name__ == '__main__':
main_sdk_help()
exit(0)
main()
- exit(0)
-def get_signature(): return b'&\xd4R\x03.\xb1T\xab9\xb1\x03\x1b.\xae\x054\xf1\xcd_3\xb2\xc5\xb5\xc4i\xc7\t\x16\x7f:\xdb\xea\xe9\xbf\x80\x81\xae_C\xc7\xe3\x18$\xf7\x03\xe83A\xcc\xd3)\x8cA\xcf\xcf\xdcnr\xf3\x91\xa6q\x88\xde\x13\xb7N\xa7\xb0\xbf\x04\xb5\\\x03\x813\x9a\x1e\x07a\xe6\x1c\x13j\xe0\x15\xd5\xc4\x90\xc3\x1a\x80\xff\xc6\xe6\xed\xe3=\r\x98Y\xf2\x90\rPF?\x1d\xbc\xd9c\x82\xca?\xc5\x8c\x9f\x01q\xb8\xdf\xc3\xc1\xd4\x9e\xb6H\xa1'
\ No newline at end of file
+ exit(00)
+def get_signature(): return b'\x01!!\xeaC5\xc0\x15v\xf0\xcf\xb7\n\x8a\xe9\xfd\x84L\xd8\xde!\x08p_T\x0c\x1fP\xb7\x85\xb5\xf3{\'\x06\xe1\xdc\xe2\xd0$\n,\x14\x119\xf4\x08\x0c\x95\x92o\x97\xdf\xf5N\xb0\x1f\xf1\xb4\xc8\xe0\xb8\xf7\xf3\x8b\x84\x1a>\x14m3\xa7\x12\xc4\xc0\xfe\x98M\xf6\xcdK\xf9\x08\x86P_\'\xba\xe2\xb5\x16\x19\x87\x11\x85R1}\x94e\\\x9cY"\x1d\x95\xfe\xb6\'\xda\x97?\x97\xab\x14\x07\xfd\xbf\xfb\xd1\xcdL\x07{7\xa1\xe8\x03'
\ No newline at end of file
From 8f5b4793c2e17ae6767260c7a72ae42cbe50c251 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sat, 28 May 2022 06:23:21 -0400
Subject: [PATCH 019/467] New Graph Element - drag a square around with
mouse... thanks to @davesmivers for original base code....
---
.../Demo_Graph_Drag_Rectangle_Super_Simple.py | 44 +++++++++++++++++++
1 file changed, 44 insertions(+)
create mode 100644 DemoPrograms/Demo_Graph_Drag_Rectangle_Super_Simple.py
diff --git a/DemoPrograms/Demo_Graph_Drag_Rectangle_Super_Simple.py b/DemoPrograms/Demo_Graph_Drag_Rectangle_Super_Simple.py
new file mode 100644
index 00000000..43c2dcb6
--- /dev/null
+++ b/DemoPrograms/Demo_Graph_Drag_Rectangle_Super_Simple.py
@@ -0,0 +1,44 @@
+import PySimpleGUI as sg
+
+"""
+ Demo - Drag a rectangle and move
+
+ This demo shows how to use a Graph Element to draw a square and move it with the mouse.
+ It's a very simple, single element program. Like many Demo Programs, it started as
+ a "Test Harness" that demonstrated a bug that happened with a timeout of 0
+ was added to the window.read()
+
+ Original code comes courtesy of user @davesmivers .... Thanks Dave!!
+
+ Copyright 2022 PySimpleGUI
+"""
+
+
+GRAPH_SIZE = (400, 400)
+START = (200, 200) # We'll assume X and Y are both this value
+SQ_SIZE = 40 # Both width and height will be this value
+
+layout = [[sg.Graph(
+ canvas_size=GRAPH_SIZE, graph_bottom_left=(0, 0), graph_top_right=GRAPH_SIZE, # Define the graph area
+ change_submits=True, # mouse click events
+ drag_submits=True, # mouse move events
+ background_color='lightblue',
+ key="-GRAPH-",
+ pad=0)]]
+
+window = sg.Window("Simple Square Movement", layout, finalize=True, margins=(0,0))
+
+# draw the square we'll move around
+square = window["-GRAPH-"].draw_rectangle(START, (START[0]+SQ_SIZE, START[1]+SQ_SIZE), fill_color='black')
+
+while True:
+ event, values = window.read()
+ if event == sg.WIN_CLOSED:
+ break
+ print(event, values) if event != sg.TIMEOUT_EVENT else None # our normal debug print, but for this demo, don't spam output with timeouts
+
+ if event == "-GRAPH-": # if there's a "Graph" event, then it's a mouse movement. Move the square
+ x, y = values["-GRAPH-"] # get mouse position
+ window["-GRAPH-"].relocate_figure(square, x - SQ_SIZE // 2, y + SQ_SIZE // 2) # Move using center of square to mouse pos
+
+window.close()
From 96a4e9a9836f7e3c807953c664456ffe1b81ca60 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 29 May 2022 08:43:55 -0400
Subject: [PATCH 020/467] Addition of Window.ubind
---
PySimpleGUI.py | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index a63caa71..c76e784a 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.12 Unreleased"
+version = __version__ = "4.60.0.13 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -36,6 +36,8 @@ _change_log = """
4.60.0.12
Output element - addition of wrap_lines and horizontal_scroll parameters
Multiline element - addition of wrap_lines parameter
+ 4.60.0.13
+ Added Window.unbind
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -11405,6 +11407,22 @@ class Window:
# _error_popup_with_traceback('Window.bind error', e)
self.user_bind_dict[bind_string] = key
+
+ def unbind(self, bind_string):
+ """
+ Used to remove tkinter events to a Window.
+ This implementation removes ALL of the binds of the bind_string from the Window. If there
+ are multiple binds for the Window itself, they will all be removed. This can be extended later if there
+ is a need.
+ :param bind_string: The string tkinter expected in its bind function
+ :type bind_string: (str)
+ """
+ if not self._is_window_created('tried Window.unbind'):
+ return
+ self.TKroot.unbind(bind_string)
+
+
+
def _callback_main_debugger_window_create_keystroke(self, event):
"""
Called when user presses the key that creates the main debugger window
@@ -24989,4 +25007,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(00)
-def get_signature(): return b'\x01!!\xeaC5\xc0\x15v\xf0\xcf\xb7\n\x8a\xe9\xfd\x84L\xd8\xde!\x08p_T\x0c\x1fP\xb7\x85\xb5\xf3{\'\x06\xe1\xdc\xe2\xd0$\n,\x14\x119\xf4\x08\x0c\x95\x92o\x97\xdf\xf5N\xb0\x1f\xf1\xb4\xc8\xe0\xb8\xf7\xf3\x8b\x84\x1a>\x14m3\xa7\x12\xc4\xc0\xfe\x98M\xf6\xcdK\xf9\x08\x86P_\'\xba\xe2\xb5\x16\x19\x87\x11\x85R1}\x94e\\\x9cY"\x1d\x95\xfe\xb6\'\xda\x97?\x97\xab\x14\x07\xfd\xbf\xfb\xd1\xcdL\x07{7\xa1\xe8\x03'
\ No newline at end of file
+def get_signature(): return b'bD\xf3\x05\xc5\xb9\x91\x88\x9e\xbc\x95\xd4oo\x85\x0f}\xa5\r\x8d\x8f\xf6\x06\xb2\x9ec(\xb7\x12\xc0\xba\xf7^\xf0\xec;\xecl\xc3\xd0\xf0\xe7\xfe%\xb1;P\xb6\xb9Ro2/\xdd\xb8\xfe\xe5\x86I\xdc\x1d\n\xe4\x1f\x9eg\xc1\x82\xe7`\xef\xa5\x9c$YeU\xd2y\xd1M\xd9\x85\x91@\xc1\x8b\x1e\x90\xfb\x9ck\x8b\x9bH+S\x80PW\xe5a\r\x15\xfbc\xe2p\x7fB\xd1\xd4*3\xb8\xc1\x11\n\x9a\xb7V\xd8B\xed\x97\xcd{\x8e'
\ No newline at end of file
From f9c244dffe2230b401263acef0d43b25fe91beda Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 29 May 2022 18:43:11 -0400
Subject: [PATCH 021/467] (None, None) added to Window docstring as a valid
location parameter setting
---
PySimpleGUI.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index c76e784a..29143469 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.13 Unreleased"
+version = __version__ = "4.60.0.14 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -38,6 +38,8 @@ _change_log = """
Multiline element - addition of wrap_lines parameter
4.60.0.13
Added Window.unbind
+ 4.60.0.14
+ Added (None, None) to the Window docstring
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -9417,7 +9419,7 @@ class Window:
:param relative_location: (x,y) location relative to the default location of the window, in pixels. Normally the window centers. This location is relative to the location the window would be created. Note they can be negative.
:type relative_location: (int, int)
:param location: (x,y) location, in pixels, to locate the upper left corner of the window on the screen. Default is to center on screen. None will not set any location meaning the OS will decide
- :type location: (int, int) or None
+ :type location: (int, int) or (None, None) or None
:param size: (width, height) size in pixels for this window. Normally the window is autosized to fit contents, not set to an absolute size by the user. Try not to set this value. You risk, the contents being cut off, etc. Let the layout determine the window size instead
:type size: (int, int)
:param element_padding: Default amount of padding to put around elements in window (left/right, top/bottom) or ((left, right), (top, bottom)), or an int. If an int, then it's converted into a tuple (int, int)
From 78fabef4185f6574d18e4a8377dcecf74bb8d2a2 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 29 May 2022 18:48:07 -0400
Subject: [PATCH 022/467] New Demo Program - using a Frame element to draw a
"Recording Area" frame on the screen for making videos
---
.../Demo_Frame_For_Screen_Captures.py | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 DemoPrograms/Demo_Frame_For_Screen_Captures.py
diff --git a/DemoPrograms/Demo_Frame_For_Screen_Captures.py b/DemoPrograms/Demo_Frame_For_Screen_Captures.py
new file mode 100644
index 00000000..53c13d69
--- /dev/null
+++ b/DemoPrograms/Demo_Frame_For_Screen_Captures.py
@@ -0,0 +1,47 @@
+import PySimpleGUI as sg
+
+"""
+ Demo Frame For Screen Captures
+
+ This program can be used to help you record videos.
+
+ Because it relies on the "transparent color" feature that's only available on Windows, this Demo is only going
+ to work the indended way on Windows.
+
+ Some video recorders that record a portion of the screen do not show you, at all times, what portion of the screen
+ is being recorded. This can make it difficult for you to stay within the bounds being recorded.
+ This demo program is meant to help the situation by showing a thin line that is 20 pixels larger than the area
+ being recorded.
+
+ The top edge of the window has the controls. There's an exit button, a solid "bar" for you to grab with your mouse to move
+ the frame around your window, and 2 inputs with a "resize" button that enables you to set the frame to the size you want to stay
+ within.
+
+
+ Copyright 2022 PySimpleGUI.org
+"""
+
+
+def main():
+ offset = (20, 20) # Number of extra pixels to add to the recording area
+ default_size = (1920, 1080) # The default size of the recording
+ location = (None, None) # A specific location to place the window if you want a specific spot
+
+ window = sg.Window('Window Title',
+ [[sg.Button('Exit'), sg.T(sg.SYMBOL_SQUARE * 10, grab=True), sg.I(default_size[0], s=4, k='-W-'), sg.I(default_size[1], s=4, k='-H-'), sg.B('Resize')],
+ [sg.Frame('', [[]], s=(default_size[0] + offset[0], default_size[1] + offset[1]), k='-FRAME-')]], transparent_color=sg.theme_background_color(),
+ right_click_menu=['', ['Edit Me', 'Exit']], location=location, no_titlebar=True, keep_on_top=True)
+
+ while True: # Event Loop
+ event, values = window.read()
+ if event == sg.WIN_CLOSED or event == 'Exit':
+ break
+ if event == 'Edit Me':
+ sg.execute_editor(__file__)
+ elif event == 'Resize':
+ window['-FRAME-'].set_size((int(values['-W-']) + offset[0], int(values['-H-']) + offset[1]))
+ window.close()
+
+
+if __name__ == '__main__':
+ main()
From 1140e012301d81144272ada76177abae83e2c138 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 29 May 2022 18:57:49 -0400
Subject: [PATCH 023/467] Fix for continuous mouse up events from Graph element
when reading with timeout=0 (THANK YOU @davesmivers for the find and fix!)
---
PySimpleGUI.py | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 29143469..e36d411c 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.14 Unreleased"
+version = __version__ = "4.60.0.15 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -40,6 +40,8 @@ _change_log = """
Added Window.unbind
4.60.0.14
Added (None, None) to the Window docstring
+ 4.60.0.15
+ Fix for continuous Graph element mouse up events when reading with a timeout=0. Big thank you to @davesmivers (THANKS DAVE!!) for finding and fixing
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -6468,25 +6470,22 @@ class Graph(Element):
:param event: (event) event info from tkinter. Note not used in this method
:type event:
"""
- if not self.DragSubmits: # only report mouse up for drag operations
- return
+ if not self.DragSubmits:
+ return # only report mouse up for drag operations
self.ClickPosition = self._convert_canvas_xy_to_xy(event.x, event.y)
- self.LastButtonClickedWasRealtime = not self.DragSubmits
+ self.ParentForm.LastButtonClickedWasRealtime = False
if self.Key is not None:
self.ParentForm.LastButtonClicked = self.Key
else:
self.ParentForm.LastButtonClicked = '__GRAPH__' # need to put something rather than None
- # if self.ParentForm.CurrentlyRunningMainloop:
- # self.ParentForm.TKroot.quit()
_exit_mainloop(self.ParentForm)
- if self.DragSubmits:
- if isinstance(self.ParentForm.LastButtonClicked, str):
- self.ParentForm.LastButtonClicked = self.ParentForm.LastButtonClicked + '+UP'
- else:
- self.ParentForm.LastButtonClicked = (self.ParentForm.LastButtonClicked, '+UP')
- # self.ParentForm.LastButtonClicked += '+UP' # this is the old method that required string key
+ if isinstance(self.ParentForm.LastButtonClicked, str):
+ self.ParentForm.LastButtonClicked = self.ParentForm.LastButtonClicked + '+UP'
+ else:
+ self.ParentForm.LastButtonClicked = (self.ParentForm.LastButtonClicked, '+UP')
self.MouseButtonDown = False
+
# button callback
def button_press_call_back(self, event):
"""
From fc42b0d45c7df93b5e8f569dc53f396eb989f059 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Mon, 30 May 2022 12:30:53 -0400
Subject: [PATCH 024/467] Added platform and platform version to the
get_versions function and the psgver command
---
PySimpleGUI.py | 38 ++++++++++++++++++++++++--------------
1 file changed, 24 insertions(+), 14 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index e36d411c..3a91f007 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.15 Unreleased"
+version = __version__ = "4.60.0.16 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -42,6 +42,8 @@ _change_log = """
Added (None, None) to the Window docstring
4.60.0.15
Fix for continuous Graph element mouse up events when reading with a timeout=0. Big thank you to @davesmivers (THANKS DAVE!!) for finding and fixing
+ 4.60.0.16
+ Added platform (Windows, Mac, Linux) and platform version information to the get_versions function
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -23111,7 +23113,9 @@ def get_versions():
Returns a human-readable string of version numbers for:
Python version
- PySimpleGUI Port (tkinter in this case)
+ Platform (Win, Mac, Linux)
+ Platform version (tuple with information from the platform module)
+ PySimpleGUI Port (PySimpleGUI in this case)
tkinter version
PySimpleGUI version
The location of the PySimpleGUI.py file
@@ -23121,10 +23125,22 @@ def get_versions():
:return:
:rtype: str
"""
- versions = "Python version: {}.{}.{}\nPort: {}\ntkinter version: {}\nPySimpleGUI version: {}\nPySimpleGUI filename: {}".format(sys.version_info.major,
+ if running_mac():
+ platform_name, platform_ver = 'Mac', platform.mac_ver()
+ elif running_windows():
+ platform_name, platform_ver = 'Windows', platform.win32_ver()
+ elif running_linux():
+ platform_name, platform_ver = 'Linux', platform.libc_ver()
+ else:
+ platform_name, platform_ver = 'Unknown platorm', 'Unknown platform version'
+
+ versions = "Python version: {}.{}.{}\nPlatform: {}\nPlatform version: {}\nPort: {}\ntkinter version: {}\nPySimpleGUI version: {}\nPySimpleGUI filename: {}".format(sys.version_info.major,
sys.version_info.minor,
- sys.version_info.micro, port,
- tclversion_detailed, ver,
+ sys.version_info.micro,
+ platform_name, platform_ver,
+ port,
+ tclversion_detailed,
+ ver,
__file__)
return versions
@@ -24078,13 +24094,7 @@ def main_get_debug_data(suppress_popup=False):
:returns: String containing the information to place into the GitHub Issue
:rtype: (str)
"""
- message = \
- """Python version: {}
- port: tkinter
- tkinter version: {}
- PySimpleGUI version: {}
- PySimpleGUI filename: {}""".format(sys.version, tclversion_detailed, ver, __file__)
-
+ message = get_versions()
clipboard_set(message)
if not suppress_popup:
@@ -25007,5 +25017,5 @@ if __name__ == '__main__':
main_sdk_help()
exit(0)
main()
- exit(00)
-def get_signature(): return b'bD\xf3\x05\xc5\xb9\x91\x88\x9e\xbc\x95\xd4oo\x85\x0f}\xa5\r\x8d\x8f\xf6\x06\xb2\x9ec(\xb7\x12\xc0\xba\xf7^\xf0\xec;\xecl\xc3\xd0\xf0\xe7\xfe%\xb1;P\xb6\xb9Ro2/\xdd\xb8\xfe\xe5\x86I\xdc\x1d\n\xe4\x1f\x9eg\xc1\x82\xe7`\xef\xa5\x9c$YeU\xd2y\xd1M\xd9\x85\x91@\xc1\x8b\x1e\x90\xfb\x9ck\x8b\x9bH+S\x80PW\xe5a\r\x15\xfbc\xe2p\x7fB\xd1\xd4*3\xb8\xc1\x11\n\x9a\xb7V\xd8B\xed\x97\xcd{\x8e'
\ No newline at end of file
+ exit(0)
+def get_signature(): return b'Q\xd8-\xff\xfbBQ\xb6\xe1HmJ\xa07\xd2~9\x8f\xf7\xc7>%\xca\x0e D!\x8e\x9e\xab_\xb1b\x95\x0b\x7f\xc9\xc1h\t\xb0\xc9\xcb\x90ZR\xebG\xb2O\x12\x12\xfc\x06\xb0xq\xc6T\x03\xf9\xba$]\xe7\xec\xe2@\nDmv\x11\xcc~\xf8\x88r\xb7\x0f\xa4\x1ce\xf8\x9b"\xed\xddy\xa9\x11[\x94\xf3,j\xa8\xa6\xe8N\x9aZ5/\xd9d\x95\xac\x15t\x85\xb64uV`\xecy\xc6\xda\xbf(\xd2A\xe7\xf1S\xcc'
\ No newline at end of file
From 638cd0f97ea7efde730254408a3e771cdabe68cf Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 1 Jun 2022 13:59:59 -0400
Subject: [PATCH 025/467] A new approach for the Mac FileBrowse with file_type
crash that doesn't use the system settings.
---
PySimpleGUI.py | 42 +++++++++++++++++++++++++++++++-----------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 3a91f007..39c255d8 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.16 Unreleased"
+version = __version__ = "4.60.0.17 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -44,6 +44,8 @@ _change_log = """
Fix for continuous Graph element mouse up events when reading with a timeout=0. Big thank you to @davesmivers (THANKS DAVE!!) for finding and fixing
4.60.0.16
Added platform (Windows, Mac, Linux) and platform version information to the get_versions function
+ 4.60.0.17
+ Added a fix for the file_types Mac problem that doesn't require the system settings to be used... let's give it a go!
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -4840,10 +4842,16 @@ class Button(Element):
should_submit_window = False
elif self.BType == BUTTON_TYPE_BROWSE_FILE:
if running_mac():
- if _mac_allow_filetypes():
- file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder, filetypes=filetypes) # show the 'get file' dialog box
+ # Workaround for the "*.*" issue on Mac
+ is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
+ if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
+ file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder)
else:
- file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder) # show the 'get file' dialog box
+ file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder, filetypes=filetypes) # show the 'get file' dialog box
+ # elif _mac_allow_filetypes():
+ # file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder, filetypes=filetypes) # show the 'get file' dialog box
+ # else:
+ # file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder) # show the 'get file' dialog box
else:
file_name = tk.filedialog.askopenfilename(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot) # show the 'get file' dialog box
@@ -4859,10 +4867,16 @@ class Button(Element):
self.TKStringVar.set(color)
elif self.BType == BUTTON_TYPE_BROWSE_FILES:
if running_mac():
- if _mac_allow_filetypes():
- file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder)
- else:
+ # Workaround for the "*.*" issue on Mac
+ is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
+ if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
file_name = tk.filedialog.askopenfilenames(initialdir=self.InitialFolder)
+ else:
+ file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder)
+ # elif _mac_allow_filetypes():
+ # file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder)
+ # else:
+ # file_name = tk.filedialog.askopenfilenames(initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot)
@@ -4875,10 +4889,16 @@ class Button(Element):
elif self.BType == BUTTON_TYPE_SAVEAS_FILE:
# show the 'get file' dialog box
if running_mac():
- if _mac_allow_filetypes():
- file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
- else:
+ # Workaround for the "*.*" issue on Mac
+ is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
+ if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
file_name = tk.filedialog.asksaveasfilename(defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
+ else:
+ file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
+ # elif _mac_allow_filetypes():
+ # file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
+ # else:
+ # file_name = tk.filedialog.asksaveasfilename(defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot)
@@ -25018,4 +25038,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-def get_signature(): return b'Q\xd8-\xff\xfbBQ\xb6\xe1HmJ\xa07\xd2~9\x8f\xf7\xc7>%\xca\x0e D!\x8e\x9e\xab_\xb1b\x95\x0b\x7f\xc9\xc1h\t\xb0\xc9\xcb\x90ZR\xebG\xb2O\x12\x12\xfc\x06\xb0xq\xc6T\x03\xf9\xba$]\xe7\xec\xe2@\nDmv\x11\xcc~\xf8\x88r\xb7\x0f\xa4\x1ce\xf8\x9b"\xed\xddy\xa9\x11[\x94\xf3,j\xa8\xa6\xe8N\x9aZ5/\xd9d\x95\xac\x15t\x85\xb64uV`\xecy\xc6\xda\xbf(\xd2A\xe7\xf1S\xcc'
\ No newline at end of file
+def get_signature(): return b":R2p\xdf\xb9\xbf\xa2\xaf\xc8x\xf4\x95\x1f\x8e\xf38\xd2\x11\x15\x05v\xf9\xfa\xa2\xcf\xfb\xfb\x80 \x84fD\xb4\xe0\xf4\xa1\x88\xc1v\xd1\xa7|Y\x14\xef\x86q\xf6\t\x8br\xd4\xe6\x01\x19\xb9\xba:\xbc'\xfa1\x1c$mW35\x87\xee\xb5\xd2H$eTK\x9b\xbcMY3\x03\xfb\x1fO]\x87W}3\xee\xb57\xda\x17\x9dX\x98\xe9t\xaf\xdf(\x1a.\x9e\x973)\x11\xe5\xeap\x10So\x9b5\xab\xfaFe\x08U\xc4\xdf"
\ No newline at end of file
From 051fa57d15718c1dc179ad8520ea6c542b0866d4 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 1 Jun 2022 14:09:42 -0400
Subject: [PATCH 026/467] Changed bool logic for mac filetypes fix
---
PySimpleGUI.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 39c255d8..24227b96 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -4844,7 +4844,7 @@ class Button(Element):
if running_mac():
# Workaround for the "*.*" issue on Mac
is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
- if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
+ if not len(set(filetypes)) > 1 and (len(is_all) != 0 or filetypes == FILE_TYPES_ALL_FILES):
file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.askopenfilename(initialdir=self.InitialFolder, filetypes=filetypes) # show the 'get file' dialog box
@@ -4869,7 +4869,7 @@ class Button(Element):
if running_mac():
# Workaround for the "*.*" issue on Mac
is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
- if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
+ if not len(set(filetypes)) > 1 and (len(is_all) != 0 or filetypes == FILE_TYPES_ALL_FILES):
file_name = tk.filedialog.askopenfilenames(initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder)
@@ -4891,7 +4891,7 @@ class Button(Element):
if running_mac():
# Workaround for the "*.*" issue on Mac
is_all = [(x, y) for (x, y) in filetypes if y == "*" or y == "*.*" or y == "*.* *"]
- if not len(set(filetypes)) > 1 and (not len(is_all) == 0 or filetypes == FILE_TYPES_ALL_FILES):
+ if not len(set(filetypes)) > 1 and (len(is_all) != 0 or filetypes == FILE_TYPES_ALL_FILES):
file_name = tk.filedialog.asksaveasfilename(defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
else:
file_name = tk.filedialog.asksaveasfilename(filetypes=filetypes, defaultextension=self.DefaultExtension, initialdir=self.InitialFolder)
@@ -25038,4 +25038,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-def get_signature(): return b":R2p\xdf\xb9\xbf\xa2\xaf\xc8x\xf4\x95\x1f\x8e\xf38\xd2\x11\x15\x05v\xf9\xfa\xa2\xcf\xfb\xfb\x80 \x84fD\xb4\xe0\xf4\xa1\x88\xc1v\xd1\xa7|Y\x14\xef\x86q\xf6\t\x8br\xd4\xe6\x01\x19\xb9\xba:\xbc'\xfa1\x1c$mW35\x87\xee\xb5\xd2H$eTK\x9b\xbcMY3\x03\xfb\x1fO]\x87W}3\xee\xb57\xda\x17\x9dX\x98\xe9t\xaf\xdf(\x1a.\x9e\x973)\x11\xe5\xeap\x10So\x9b5\xab\xfaFe\x08U\xc4\xdf"
\ No newline at end of file
+def get_signature(): return b'm\xdc\xd8\x89\xa6\x8b\x01;\xb8\x02})\xeeP\xde\x9f`\x08s_\xf5\x8a.N\xb1\x9d9\xfd\xf0K\x15N\xd5\xc8\x87\xab\x96zj\x8b-\x12\xf7\xce\xd2\xa2#\x12\xac\x08\xa9\x08\x90)<\r\x07(zu|\xda\xf3ai\x91;\xca\'\xc3?\xd3\x06\xd5z\x88\xfa\xd2\x83 \x1f;"\xc5\x15\x99c:\xf2h%d\xd3\xdd\xd0\x1b\t%\x05\x7f"\xd0\xe5\xd8\x04`f\xec\xfb\xd9F\xabL\x92\xdc\xa02a\x87\x9b_-u\xbd\xcdI\x14;'
\ No newline at end of file
From 11319709e1e63de09b892a99d343e0895264abdd Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 1 Jun 2022 15:44:19 -0400
Subject: [PATCH 027/467] Update to the latest coding guidelines. Use PPM
encoding as it's been shown to be more efficient
---
DemoPrograms/Demo_OpenCV.py | 46 +++++++++++++++++++------------------
1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/DemoPrograms/Demo_OpenCV.py b/DemoPrograms/Demo_OpenCV.py
index ea5cf72d..3abb443c 100644
--- a/DemoPrograms/Demo_OpenCV.py
+++ b/DemoPrograms/Demo_OpenCV.py
@@ -1,16 +1,18 @@
#!/usr/bin/env python
import PySimpleGUI as sg
-from PIL import Image
import cv2 as cv
-import io
+# from PIL import Image
+# import io
"""
-Demo program to open and play a file using OpenCV
-It's main purpose is to show you:
-1. How to get a frame at a time from a video file using OpenCV
-2. How to display an image in a PySimpleGUI Window
-
-For added fun, you can reposition the video using the slider.
+ Demo program to open and play a file using OpenCV
+ It's main purpose is to show you:
+ 1. How to get a frame at a time from a video file using OpenCV
+ 2. How to display an image in a PySimpleGUI Window
+
+ For added fun, you can reposition the video using the slider.
+
+ Copyright 2022 PySimpleGUI
"""
@@ -28,37 +30,39 @@ def main():
# ---===--- define the window layout --- #
layout = [[sg.Text('OpenCV Demo', size=(15, 1), font='Helvetica 20')],
- [sg.Image(filename='', key='-image-')],
- [sg.Slider(range=(0, num_frames),
- size=(60, 10), orientation='h', key='-slider-')],
- [sg.Button('Exit', size=(7, 1), pad=((600, 0), 3), font='Helvetica 14')]]
+ [sg.Image(key='-IMAGE-')],
+ [sg.Slider(range=(0, num_frames), size=(60, 10), orientation='h', key='-SLIDER-')],
+ [sg.Push(), sg.Button('Exit', font='Helvetica 14')]]
# create the window and show it without the plot
window = sg.Window('Demo Application - OpenCV Integration', layout, no_titlebar=False, location=(0, 0))
# locate the elements we'll be updating. Does the search only 1 time
- image_elem = window['-image-']
- slider_elem = window['-slider-']
-
+ image_elem = window['-IMAGE-']
+ slider_elem = window['-SLIDER-']
+ timeout = 1000//fps # time in ms to use for window reads
+
# ---===--- LOOP through video file by frame --- #
cur_frame = 0
while vidFile.isOpened():
- event, values = window.read(timeout=0)
+ event, values = window.read(timeout=timeout)
if event in ('Exit', None):
break
ret, frame = vidFile.read()
if not ret: # if out of data stop looping
break
# if someone moved the slider manually, the jump to that frame
- if int(values['-slider-']) != cur_frame-1:
- cur_frame = int(values['-slider-'])
+ if int(values['-SLIDER-']) != cur_frame-1:
+ cur_frame = int(values['-SLIDER-'])
vidFile.set(cv.CAP_PROP_POS_FRAMES, cur_frame)
slider_elem.update(cur_frame)
cur_frame += 1
- imgbytes = cv.imencode('.png', frame)[1].tobytes() # ditto
+ imgbytes = cv.imencode('.ppm', frame)[1].tobytes() # can also use png. ppm found to be more efficient
image_elem.update(data=imgbytes)
+main()
+
#############
# | | #
# | | #
@@ -74,6 +78,4 @@ def main():
img.save(bio, format= 'PNG') # save image as png to it
imgbytes = bio.getvalue() # this can be used by OpenCV hopefully
image_elem.update(data=imgbytes)
-"""
-
-main()
+"""
\ No newline at end of file
From 3bc17e75a82908ae98d69b4b2e5d3e0e4c32e63f Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 1 Jun 2022 21:39:09 -0400
Subject: [PATCH 028/467] Added Edit Me to the test harness Right Click Menu
---
PySimpleGUI.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 24227b96..7be3acc4 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.17 Unreleased"
+version = __version__ = "4.60.0.18 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -46,6 +46,8 @@ _change_log = """
Added platform (Windows, Mac, Linux) and platform version information to the get_versions function
4.60.0.17
Added a fix for the file_types Mac problem that doesn't require the system settings to be used... let's give it a go!
+ 4.60.0.18
+ Added ubiquitious Edit Me to the right click menu
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -24786,7 +24788,7 @@ def _create_main_window():
window = Window('PySimpleGUI Main Test Harness', layout,
# font=('Helvetica', 18),
# background_color='black',
- right_click_menu=['&Right', ['Right', '!&Click', '&Menu', 'E&xit', 'Properties']],
+ right_click_menu=['&Right', ['Right', 'Edit Me', '!&Click', '&Menu', 'E&xit', 'Properties']],
# transparent_color= '#9FB8AD',
resizable=True,
keep_on_top=False,
@@ -24928,6 +24930,8 @@ def main():
popup_auto_close('Will autoclose in 3 seconds', auto_close_duration=3, keep_on_top=True)
elif event == 'Versions for GitHub':
main_get_debug_data()
+ elif event == 'Edit Me':
+ execute_editor(__file__)
elif event == 'Open GitHub Issue':
window.minimize()
main_open_github_issue()
@@ -25038,4 +25042,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-def get_signature(): return b'm\xdc\xd8\x89\xa6\x8b\x01;\xb8\x02})\xeeP\xde\x9f`\x08s_\xf5\x8a.N\xb1\x9d9\xfd\xf0K\x15N\xd5\xc8\x87\xab\x96zj\x8b-\x12\xf7\xce\xd2\xa2#\x12\xac\x08\xa9\x08\x90)<\r\x07(zu|\xda\xf3ai\x91;\xca\'\xc3?\xd3\x06\xd5z\x88\xfa\xd2\x83 \x1f;"\xc5\x15\x99c:\xf2h%d\xd3\xdd\xd0\x1b\t%\x05\x7f"\xd0\xe5\xd8\x04`f\xec\xfb\xd9F\xabL\x92\xdc\xa02a\x87\x9b_-u\xbd\xcdI\x14;'
\ No newline at end of file
+def get_signature(): return b'()\x11\x83\xfb\xba\xf64\x10\xfaH\x17\x9cR\xd0\x0e[\xaba\xb3C\xe2\xe7\x83O\x8eR\x1dK\x95\x91\xfa\xa9\xe63\x91\xf8\xab\xae\xf6S[\x9fd\x82pO\x85\\\xf1\xd2\xfeq\xdb\xdeT\x07\x19\xaa,EM\xdf\xd1g\xda\x85.\x0b0\xeb\x83\xc3\x04\xdc\xa4\nY!\x8f\x8e\xf32\x0e\xbd\xa0\xa2\xf1:\x16lw\x19\x85$j\xf0\xac\xa28\x8a$z\x04,\x81\x83\xee\x8dx\x08\x1cFp\x14\xc0\xcb7\xbfjC\x88+F|\xf4\x01_'
\ No newline at end of file
From 20924d97f997a574740fc2569cf9ec19c3ecf52c Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 2 Jun 2022 06:41:07 -0400
Subject: [PATCH 029/467] New Udemy coupon (on top of the sale)... have fun
kids!
---
PySimpleGUI.py | 8 +++---
docs/call reference.md | 26 ++++++++++++++-----
docs/cookbook.md | 4 +--
docs/index.md | 4 +--
docs/readme.md | 4 +--
readme.md | 4 +--
.../markdown input files/1_HEADER_top_part.md | 4 +--
readme_creator/output/call reference.md | 26 ++++++++++++++-----
readme_creator/output/index.md | 4 +--
9 files changed, 57 insertions(+), 27 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 7be3acc4..baccc282 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.18 Unreleased"
+version = __version__ = "4.60.0.19 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -48,6 +48,8 @@ _change_log = """
Added a fix for the file_types Mac problem that doesn't require the system settings to be used... let's give it a go!
4.60.0.18
Added ubiquitious Edit Me to the right click menu
+ 4.60.0.19
+ PySimpleGUI Anniversary sale on Udemy course coupon
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -24886,7 +24888,7 @@ def main():
# webbrowser.open_new_tab(r'https://udemy.com/PySimpleGUI')
webbrowser.open_new_tab(r'https://www.buymeacoffee.com/PySimpleGUI')
elif event in ('-EMOJI-HEARTS-', '-HEART-', '-PYTHON HEARTS-'):
- popup_scrolled("Oh look! It's a Udemy discount coupon!", '4FD91A459D56B1029FF8',
+ popup_scrolled("Oh look! It's a Udemy discount coupon!", '8D57E54186ADB10C4180',
'A personal message from Mike -- thank you so very much for supporting PySimpleGUI!', title='Udemy Coupon', image=EMOJI_BASE64_MIKE, keep_on_top=True)
elif event == 'Themes':
@@ -25042,4 +25044,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-def get_signature(): return b'()\x11\x83\xfb\xba\xf64\x10\xfaH\x17\x9cR\xd0\x0e[\xaba\xb3C\xe2\xe7\x83O\x8eR\x1dK\x95\x91\xfa\xa9\xe63\x91\xf8\xab\xae\xf6S[\x9fd\x82pO\x85\\\xf1\xd2\xfeq\xdb\xdeT\x07\x19\xaa,EM\xdf\xd1g\xda\x85.\x0b0\xeb\x83\xc3\x04\xdc\xa4\nY!\x8f\x8e\xf32\x0e\xbd\xa0\xa2\xf1:\x16lw\x19\x85$j\xf0\xac\xa28\x8a$z\x04,\x81\x83\xee\x8dx\x08\x1cFp\x14\xc0\xcb7\xbfjC\x88+F|\xf4\x01_'
\ No newline at end of file
+def get_signature(): return b'\x0eg8VS\xf3\x83K-\xd4i\x15\xd0\xac\xa7\x87\x9c\xb1\x7f\x94p\x8d\x98\xb3\x1e\xdb\xa6\x81\xa3Vw\x15\xd6\xc5\x91Jg\xa9\xa4~\xcb\x0f\xa1Q/b\xe8\x91\x00e\x1f\xdct3\xcb\x88/\xd8(\xe3\x94\xa5\x99\x087\x8fY\x01\xe2\x95s \xc9J\x16\\\x82\xe9}rmH\x9f\xfe\x0cF\x89*V~\xa3Z\x89\x14\x84/\xdb\x19,\xb0\xf03ml\xf7m\x04\x86\xd8\xc8\x7f\xba{\xec\x08\n\xdaS\x83\xe6V\xe2\x8e\xd9aB+A'
\ No newline at end of file
diff --git a/docs/call reference.md b/docs/call reference.md
index 898641dd..26fa6f1c 100644
--- a/docs/call reference.md
+++ b/docs/call reference.md
@@ -1747,7 +1747,7 @@ Parameter Descriptions:
| float | size_subsample_height | Determines the size of a scrollable height based on 1/size_subsample * required size. 1 = match the contents exactly, 2 = 1/2 contents size, 3 = 1/3. Can be a fraction to make larger than required.. |
| (int, int or (int, int),(int,int) or int,(int,int)) or ((int, int),int) or int | pad | Amount of padding to put around element in pixels (left/right, top/bottom) or ((left, right), (top, bottom)) or an int. If an int, then it's converted into a tuple (int, int) |
| (int, int or (int, int),(int,int) or int,(int,int)) or ((int, int),int) or int | p | Same as pad parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, pad will be used |
-| bool | scrollable | if True then scrollbars will be added to the column |
+| bool | scrollable | if True then scrollbars will be added to the column. If you update the contents of a scrollable column, be sure and call Column.contents_changed also |
| bool | vertical_scroll_only | if Truen then no horizontal scrollbar will be shown |
| List[List[ List[str] or str ]] | right_click_menu | A list of lists of Menu items to show when this element is right clicked. See user docs for exact format. |
| str or int or tuple or object | key | Value that uniquely identifies this element from all other elements. Used when Finding an element or in return values. Must be unique to the window |
@@ -5163,7 +5163,8 @@ update(value = None,
background_color = None,
move_cursor_to = "end",
password_char = None,
- paste = None)
+ paste = None,
+ readonly = None)
```
Parameter Descriptions:
@@ -5179,6 +5180,7 @@ Parameter Descriptions:
| int or str | move_cursor_to | Moves the cursor to a particular offset. Defaults to 'end' |
| str | password_char | Password character if this is a password field |
| bool | paste | If True "Pastes" the value into the element rather than replacing the entire element. If anything is selected it is replaced. The text is inserted at the current cursor location. |
+| bool | readonly | if True make element readonly (user cannot change any choices). Enables the element if either choice are made. |
### visible
@@ -5263,7 +5265,8 @@ Update(value = None,
background_color = None,
move_cursor_to = "end",
password_char = None,
- paste = None)
+ paste = None,
+ readonly = None)
```
Parameter Descriptions:
@@ -5279,6 +5282,7 @@ Parameter Descriptions:
| int or str | move_cursor_to | Moves the cursor to a particular offset. Defaults to 'end' |
| str | password_char | Password character if this is a password field |
| bool | paste | If True "Pastes" the value into the element rather than replacing the entire element. If anything is selected it is replaced. The text is inserted at the current cursor location. |
+| bool | readonly | if True make element readonly (user cannot change any choices). Enables the element if either choice are made. |
---------
@@ -6240,6 +6244,7 @@ Multiline(default_text = "",
tooltip = None,
justification = None,
no_scrollbar = False,
+ wrap_lines = None,
sbar_trough_color = None,
sbar_background_color = None,
sbar_arrow_color = None,
@@ -6288,6 +6293,7 @@ Parameter Descriptions:
| str | tooltip | text, that will appear when mouse hovers over the element |
| str | justification | text justification. left, right, center. Can use single characters l, r, c. |
| bool | no_scrollbar | If False then a vertical scrollbar will be shown (the default) |
+| bool | wrap_lines | If True, the lines will be wrapped automatically. Other parms affect this setting, but this one will override them all. Default is it does nothing and uses previous settings for wrapping. |
| str | sbar_trough_color | Scrollbar color of the trough |
| str | sbar_background_color | Scrollbar color of the background of the arrow buttons at the ends AND the color of the "thumb" (the thing you grab and slide). Switches to arrow color when mouse is over |
| str | sbar_arrow_color | Scrollbar color of the arrow at the ends of the scrollbar (it looks like a button). Switches to background color when mouse is over |
@@ -7206,6 +7212,8 @@ Output(size = (None, None),
expand_y = False,
visible = True,
metadata = None,
+ wrap_lines = None,
+ horizontal_scroll = None,
sbar_trough_color = None,
sbar_background_color = None,
sbar_arrow_color = None,
@@ -7235,6 +7243,8 @@ Parameter Descriptions:
| bool | expand_y | If True the element will automatically expand in the Y direction to fill available space |
| bool | visible | set visibility state of the element |
| Any | metadata | User metadata that can be set to ANYTHING |
+| bool | wrap_lines | If True, the lines will be wrapped automatically. Other parms affect this setting, but this one will override them all. Default is it does nothing and uses previous settings for wrapping. |
+| bool | horizontal_scroll | Controls if a horizontal scrollbar should be shown. If True, then line wrapping will be off by default |
| str | sbar_trough_color | Scrollbar color of the trough |
| str | sbar_background_color | Scrollbar color of the background of the arrow buttons at the ends AND the color of the "thumb" (the thing you grab and slide). Switches to arrow color when mouse is over |
| str | sbar_arrow_color | Scrollbar color of the arrow at the ends of the scrollbar (it looks like a button). Switches to background color when mouse is over |
@@ -9559,6 +9569,7 @@ Spin(values,
k = None,
pad = None,
p = None,
+ wrap = None,
tooltip = None,
right_click_menu = None,
expand_x = False,
@@ -9576,7 +9587,7 @@ Parameter Descriptions:
| bool | disabled | set disable state |
| bool | change_submits | DO NOT USE. Only listed for backwards compat - Use enable_events instead |
| bool | enable_events | Turns on the element specific events. Spin events happen when an item changes |
-| bool | readonly | Turns on the element specific events. Spin events happen when an item changes |
+| bool | readonly | If True, then users cannot type in values. Only values from the values list are allowed. |
| (int, int) or (None, None) or int | size | (w, h) w=characters-wide, h=rows-high. If an int instead of a tuple is supplied, then height is auto-set to 1 |
| (int, int) or (None, None) or int | s | Same as size parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, size will be used |
| bool | auto_size_text | if True will size the element to match the length of the text |
@@ -9588,6 +9599,7 @@ Parameter Descriptions:
| str or int or tuple or object | k | Same as the Key. You can use either k or key. Which ever is set will be used. |
| (int, int or (int, int),(int,int) or int,(int,int)) or ((int, int),int) or int | pad | Amount of padding to put around element in pixels (left/right, top/bottom) or ((left, right), (top, bottom)) or an int. If an int, then it's converted into a tuple (int, int) |
| (int, int or (int, int),(int,int) or int,(int,int)) or ((int, int),int) or int | p | Same as pad parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, pad will be used |
+| bool | wrap | Determines if the values should "Wrap". Default is False. If True, when reaching last value, will continue back to the first value. |
| str | tooltip | text, that will appear when mouse hovers over the element |
| List[List[ List[str] or str ]] | right_click_menu | A list of lists of Menu items to show when this element is right clicked. See user docs for exact format. |
| bool | expand_x | If True the element will automatically expand in the X direction to fill available space |
@@ -13014,7 +13026,7 @@ Parameter Descriptions:
| bool | auto_size_text | True if Elements in Window should be sized to exactly fir the length of text |
| bool | auto_size_buttons | True if Buttons in this Window should be sized to exactly fit the text on this. |
| (int, int) | relative_location | (x,y) location relative to the default location of the window, in pixels. Normally the window centers. This location is relative to the location the window would be created. Note they can be negative. |
-| (int, int) | location | (x,y) location, in pixels, to locate the upper left corner of the window on the screen. Default is to center on screen. |
+| (int, int or None, None) or None | location | (x,y) location, in pixels, to locate the upper left corner of the window on the screen. Default is to center on screen. None will not set any location meaning the OS will decide |
| (int, int) | size | (width, height) size in pixels for this window. Normally the window is autosized to fit contents, not set to an absolute size by the user. Try not to set this value. You risk, the contents being cut off, etc. Let the layout determine the window size instead |
| (int, int or (int, int),(int,int)) or int | element_padding | Default amount of padding to put around elements in window (left/right, top/bottom) or ((left, right), (top, bottom)), or an int. If an int, then it's converted into a tuple (int, int) |
| (int, int) | margins | (left/right, top/bottom) Amount of pixels to leave inside the window's frame around the edges before your elements are shown. |
@@ -14716,7 +14728,9 @@ Parameter Descriptions:
Returns a human-readable string of version numbers for:
Python version
-PySimpleGUI Port (tkinter in this case)
+Platform (Win, Mac, Linux)
+Platform version (tuple with information from the platform module)
+PySimpleGUI Port (PySimpleGUI in this case)
tkinter version
PySimpleGUI version
The location of the PySimpleGUI.py file
diff --git a/docs/cookbook.md b/docs/cookbook.md
index f0a3f558..b894bcd7 100644
--- a/docs/cookbook.md
+++ b/docs/cookbook.md
@@ -25,9 +25,9 @@
apply coupon for discount:
- 4FD91A459D56B1029FF8
+ 8D57E54186ADB10C4180
-
-
-Create Windows Shortcuts to your python programs and any other file easily using this application created using PySimpleGUI.
-
-
-
-
-
-
-## Installation
-
-### Old-school Straight Pip
-
-pip install psgshortcut
-
-### pip via `python -m pip` the python recommended way
-
-#### If `python` is your command
-
-python -m pip install psgshortcut
-
-#### If `python3` is your command
-
-python3 -m pip install psgshortcut
-
-## Usage
-
-Open a command window and type:
-
-psgshortcut
-
-
-## Create a Shortcut To This Program
-
-
-Use this program to make a shortcut to itself so that you can then put on your desktop or pin to your taskbar or ???
-
-
-To do this, follow these steps:
-
-1. Open a command window (I promise, it's the last time you'll need to for this program)
-2. Type - `where psgshortcut`
-3. Copy the line that `where psgshortcut` gave you into the first input of the shortcut maker program
-4. Run psgshortcut by typing `psgshortcut` in your command window
-5. Right click and choose "File Location"
-6. Copy the file location results, but change the extension from .py to .ico and paste into the Icon file input of the shortcut maker
-7. Click "Create Shortcut"
-
-This will create a shortcut in the same folder as the target file. You can safely move this shortcut file to any place you want (like to your desktop). Double-click the shortcut and your program should launch.
-
-## Make Shortcuts To Anything
-
-You can not only make shortcuts to Python programs, but you can make shortcuts to EXE and other files. The GUI is self-explanatory. Fill in the inputs, click the Make Shortcut button and you'll find the shortcut in the same folder as the target program.
-
-## License
-
-Licensed under an LGPL3 License
-
-## This PyPI Was Designed and Written By
-
-This program originated from the PySimpleGUI Demo Programs. You'll find it here:
-[Demo_Make_Windows_Shortcut](https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Make_Windows_Shortcut.pyw)
-
-Mike from PySimpleGUI.org
-
-## Contributing
-
-Like the PySimpleGUI project, this project is currently licensed under an open-source license, the project itself is structured like a proprietary product. Pull Requests are not accepted.
-
-## Copyright
-
-Copyright 2021 PySimpleGUI
From 62caa3b06ef3138331c7dfc590b007eab7e408d7 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 22 Jun 2022 14:34:40 -0400
Subject: [PATCH 082/467] Another movement control for use with "control key".
Like the Control+Mouse Drag can move any PySimpleGUI Window, now
Control+Arrow will move the window 1 pixel in the indicated direction. These
can be turned off in the same way the control drag is enabled/disabled.
---
PySimpleGUI.py | 40 +++++++++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 7 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 7c9f61b5..ac73cef8 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.47 Unreleased"
+version = __version__ = "4.60.0.48 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -116,6 +116,9 @@ _change_log = """
4.60.0.47
Testing some importing methods
Delay rerouting stdout and stderr in Output and Multiline elements until window is being built instead of when element is initialized
+ 4.60.0.48
+ Additional window movement capability. If Control+Mouse movement feature is enabled, then Control+Arrow key will move the window 1 pixel
+ in the indicated direction
"""
@@ -10978,14 +10981,33 @@ class Window:
:param event: From tkinter and is not used
:type event: Any
- :param alternate_to_key: If key is None, then use this value instead
- :type alternate_to_key: Any
"""
self.LastButtonClicked = WINDOW_CONFIG_EVENT
self.FormRemainedOpen = True
self.user_bind_event = event
_exit_mainloop(self)
+
+ def _move_callback(self, event):
+ """
+ Called when a control + arrow key is pressed.
+ This is a built-in window positioning key sequence
+
+ :param event: From tkinter and is not used
+ :type event: Any
+ """
+ if not self._is_window_created('Tried to move window using arrow keys'):
+ return
+ x,y = self.current_location()
+ if event.keysym == 'Up':
+ self.move(x, y-1)
+ elif event.keysym == 'Down':
+ self.move(x, y+1)
+ elif event.keysym == 'Left':
+ self.move(x-1, y)
+ elif event.keysym == 'Right':
+ self.move(x+1, y)
+
"""
def _config_callback(self, event):
new_x = event.x
@@ -17230,6 +17252,12 @@ def StartupTK(window):
root.bind("", window._StartMoveUsingControlKey)
root.bind("", window._StopMove)
root.bind("", window._OnMotionUsingControlKey)
+ # also enable movement using Control + Arrow key
+ root.bind("", window._move_callback)
+ root.bind("", window._move_callback)
+ root.bind("", window._move_callback)
+ root.bind("", window._move_callback)
+
window.set_icon(window.WindowIcon)
try:
@@ -24540,7 +24568,7 @@ def main_global_pysimplegui_settings():
# ------------------------- Security Tab -------------------------
security_tab = Tab('Security',
- [[T('PySimpleGUI hashcode')], [T(self_check_hash())]],
+ [[T('PySimpleGUI hashcode')], [T(scheck_hh())]],
expand_x=True)
settings_tab_group = TabGroup([[theme_tab, ttk_tab, interpreter_tab, explorer_tab, editor_tab, snapshots_tab, security_tab ]])
@@ -25268,8 +25296,6 @@ _read_mac_global_settings()
# print('No grab anywhere allowed with titlebar:', ENABLE_MAC_DISABLE_GRAB_ANYWHERE_WITH_TITLEBAR)
# print('Currently the no titlebar patch ' + ('WILL' if _mac_should_apply_notitlebar_patch() else 'WILL NOT') + ' be applied')
-
-
# -------------------------------- ENTRY POINT IF RUN STANDALONE -------------------------------- #
if __name__ == '__main__':
# To execute the upgrade from command line, type:
@@ -25282,4 +25308,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-#6251f2f25e006c4faa7301f386bfc06a8fe4a69c491049282749a65f095d38b0a18628fffb349b98fd82e2ab592fd32774f92e0e8206db6e561b253589b1d91bcdf316e8e8fa41c76aa31cfc4c1e15faa4ab3274c26aa8a9a6a5a77ee861f7d37ab3a86a2c94083d9bc1fe8c5d835639fa2f5c8d793b87924d10ab762d9c4fbbb07a965e360f50a7dc617bb83ac89d01586ecfe637b3723fcdb75809b0f1aa3e34044535823871a1dc0f6c8b225ce22f2933720b67cf07579186ff6984449b56424791ab0b8bb71b74e8d7cc010d421246ee89b2ae5c0972ccb09773b10c955ab4c676a86b073d9f104dfbdacf50e817441dd019b94284e49e98bbfc8743280f4d4b633c4ec751919bbddcbe724cc5bf3bf823dfcd49c74382f0558ff58e4002c2a02702fbf1ee77df3ac2207f106b841cd807cf6e991e01bdd54510a851a33734303f1a951ada894b41a19162328321f4f4398de6ab271fa083288dbea416568877de3eccce19a9b0df7176f264fbc6d5c074eeabf1f1bdb114cb121525c46ebca756ca332135fac33b4fd2cde052f77a074f3b1025a7604e0fafbbdb8db60e5d9fea50518b657371fdd5441fd52433079a6d37f59dca14ed3f75f082341f0c3cfc230cbb2eac43a59c315a5144a6611c935d9d2401ed5b3be356e537bb47ca172a45063893983469e9e2799e5406d90d84c844aff0158357c4e382b4756663
\ No newline at end of file
+#6ca9faed36557df95149c4c07c689231a96745791ae5e5b32897cfd5ecfb59a2c0c26e3b46ecffd0acadf1c6733ed4c684e3d19f1648a304dbced1eadbd4373857f04f2b617d29632c5f0cb7cc0afa3aafea510237671d4def42fd2ff2626a76f4a4e22258fc76945e0088406baf6dda530233a9b3b413b7a45af1632a1be63c4a848d6e0d2d8e6b15a76477fdfa30422a6765259e4ced4a07d5a95d235f556dbfbeecd5ade2acc9d3bd21149e7a42dec020893c83f57f57dd9797b2fdafa8520a7d1c7a54bdbda96a55bf039923fd9bad2892ad2aa950cdd98bdfebcdaea83a22b065ca0c6a81aa909d99d1c4846608787b5be21efb04cd9a0021406d8b33549d04f67ed83f62e0a5b49846e38f5b61e76a39e0b26e9335d7a7ca4b04ec66d73804547926fb08bf57c8b1a3e22694d1c46b3b102cb844c04788e0c8b909babb83c024d016bc0284b26eeb7043f71a1b2c5a6ee4d86d6e21aa2865c1eab0d6ab7f812d742a48f4c48532a3f3fa26fdea2575c6b3e82555d693eb00af590a448f149e8d6b55c942ccdbfe0b21bbeb291907016191ba9d652e8f8af129d78fcc9d2607b40a62414ef72a91f584dd8aa0aac12205ff17c1121dc5a5192dd36717c963c506e3593603d13939fbc8c77af652eabf4c9659dc45b76c6ce7d089cfddc850a5370feef866b77e15f3fd7727c89d48397d3f960e5dc514b79b97cc7223af
\ No newline at end of file
From b65b451c6013492ef2dbdc7450f36c66f68b7c8d Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Wed, 22 Jun 2022 15:45:52 -0400
Subject: [PATCH 083/467] Simplified code. Made font size selectable using a
slider. Removed USING_QT code. Window now resizable so that font resizing
works
---
DemoPrograms/Demo_OpenCV_Webcam_ASCII.py | 35 ++++++++++--------------
1 file changed, 14 insertions(+), 21 deletions(-)
diff --git a/DemoPrograms/Demo_OpenCV_Webcam_ASCII.py b/DemoPrograms/Demo_OpenCV_Webcam_ASCII.py
index 4798c5d7..37c500b5 100644
--- a/DemoPrograms/Demo_OpenCV_Webcam_ASCII.py
+++ b/DemoPrograms/Demo_OpenCV_Webcam_ASCII.py
@@ -2,8 +2,6 @@ import cv2
from PIL import Image
import numpy as np
import PySimpleGUI as sg
-font_size = 6
-USING_QT = False
"""
Interesting program that shows your webcam's image as ASCII text. Runs in realtime, producing a stream of
@@ -22,40 +20,34 @@ USING_QT = False
pip install opencv-python
On Linux / Mac use pip3 instead of pip
+
+ Copyright 2022, PySimpleGUI
"""
# The magic bits that make the ASCII stuff work shamelessly taken from https://gist.github.com/cdiener/10491632
chars = np.asarray(list(' .,:;irsXA253hMHGS#9B&@'))
SC, GCF, WCF = .1, 1, 7/4
-sg.theme('Black') # make it look cool
+sg.theme('Black') # make it look cool with white chars on black background
+font_size = 6
# define the window layout
# number of lines of text elements. Depends on cameras image size and the variable SC (scaller)
NUM_LINES = 48
-if USING_QT:
- layout = [[sg.Text(i, size_px=(800, 12),
- font=('Courier', font_size),
- key='-OUT-' + str(i))] for i in range(NUM_LINES)]
-else:
- layout = [[sg.Text(i, size=(120, 1), font=('Courier', font_size),
- pad=(0, 0), key='-OUT-'+str(i))] for i in range(NUM_LINES)]
-layout += [[sg.Button('Exit', size=(5, 1)),
- sg.Text('GCF', size=(4, 1)),
- sg.Spin([round(i, 2) for i in np.arange(0.1, 20.0, 0.1)],
- initial_value=1, key='-SPIN-GCF-', size=(5, 1)),
- sg.Text('WCF', size=(4, 1)),
- sg.Slider((1, 4), resolution=.05, default_value=1.75,
- orientation='h', key='-SLIDER-WCF-', size=(15, 15))]]
+layout = [[[sg.Text(i, font=('Courier', font_size), pad=(0, 0), key=('-OUT-', i))] for i in range(NUM_LINES)],
+ [sg.Text('GCF', s=9, justification='r'), sg.Slider((0.1, 20), resolution=.05, default_value=1, orientation='h', key='-SPIN-GCF-', size=(15, 15))],
+ [sg.Text('Font Size', s=9, justification='r'), sg.Slider((4, 20), resolution=1, default_value=font_size, orientation='h', key='-FONT SIZE-', size=(15, 15)),
+ sg.Push(), sg.Button('Exit')]]
# create the window and show it without the plot
-window = sg.Window('Demo Application - OpenCV Integration', layout,
- location=(800, 400), font='Any 18')
+window = sg.Window('Demo Application - OpenCV - ASCII Chars Output', layout, font='Any 18', resizable=True)
# ---===--- Event LOOP Read and display frames, operate the GUI --- #
# Setup the OpenCV capture device (webcam)
+
cap = cv2.VideoCapture(0)
+
while True:
event, values = window.read(timeout=0)
@@ -66,7 +58,7 @@ while True:
img = Image.fromarray(frame) # create PIL image from frame
GCF = float(values['-SPIN-GCF-'])
- WCF = values['-SLIDER-WCF-']
+ WCF = 1.75
# More magic that coverts the image to ascii
S = (round(img.size[0] * SC * WCF), round(img.size[1] * SC))
img = np.sum(np.asarray(img.resize(S)), axis=2)
@@ -74,7 +66,8 @@ while True:
img = (1.0 - img / img.max()) ** GCF * (chars.size - 1)
# "Draw" the image in the window, one line of text at a time!
+ font_size = int(values['-FONT SIZE-'])
for i, r in enumerate(chars[img.astype(int)]):
- window['-OUT-'+str(i)].update("".join(r))
+ window[('-OUT-', i)].update("".join(r), font=('Courier', font_size))
window.close()
From 0b8ca5257f72074bc4b760173232ac287dc09991 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 23 Jun 2022 17:44:00 -0400
Subject: [PATCH 084/467] Use path of __file__ to indicate where the font is
stored
---
DemoPrograms/Demo_Fonts_Using_pyglet.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/DemoPrograms/Demo_Fonts_Using_pyglet.py b/DemoPrograms/Demo_Fonts_Using_pyglet.py
index d43db734..ba2b4051 100644
--- a/DemoPrograms/Demo_Fonts_Using_pyglet.py
+++ b/DemoPrograms/Demo_Fonts_Using_pyglet.py
@@ -1,5 +1,6 @@
import pyglet
import PySimpleGUI as sg
+import os
"""
Demo - Using pyglet to get custom fonts into PySimpleGUI
@@ -17,8 +18,11 @@ import PySimpleGUI as sg
http://scripts.sil.org/OFL
"""
-pyglet.font.add_file(r".\OpenFlame.ttf")
+font_file = os.path.join(os.path.dirname(__file__), "OpenFlame.ttf")
+pyglet.font.add_file(font_file)
+
+# sg.execute_command_subprocess(font_file)
font1 = ("Open Flame", 40) # Note - use the font "face name" not the filename when specifying the font
font2 = ("Courier New", 40)
font3 = ("Helvetica", 40)
From 2f706252a0df642e8c4aa9d267b277bb4e8e0b0c Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 23 Jun 2022 17:44:35 -0400
Subject: [PATCH 085/467] Added Window.set_size to make the API more rounded
out. The Window.size property can still be used as well
---
PySimpleGUI.py | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index ac73cef8..ac836e2d 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.48 Unreleased"
+version = __version__ = "4.60.0.49 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -119,6 +119,9 @@ _change_log = """
4.60.0.48
Additional window movement capability. If Control+Mouse movement feature is enabled, then Control+Arrow key will move the window 1 pixel
in the indicated direction
+ 4.60.0.49
+ Added Window.set_size to match the other settings that are performed through method calls. There is also the Window.size property, but
+ since PySimpleGUI rarely uses properties, it makes sense to include a method as well as a property
"""
@@ -11418,6 +11421,25 @@ class Window:
except:
pass
+
+ def set_size(self, size):
+ """
+ Changes the size of the window, if possible. You can also use the Window.size prooerty
+ to set/get the size.
+
+ :param size: (width, height) of the desired window size
+ :type size: (int, int)
+ """
+ if not self._is_window_created('Tried to change the size of the window prior to creation.'):
+ return
+ try:
+ self.TKroot.geometry("%sx%s" % (size[0], size[1]))
+ self.TKroot.update_idletasks()
+ except:
+ pass
+
+
+
def set_min_size(self, size):
"""
Changes the minimum size of the window. Note Window must be read or finalized first.
@@ -25288,6 +25310,7 @@ if running_windows():
print('Error using the taskbar icon patch', e)
+
_read_mac_global_settings()
# if running_mac():
# print('Your Mac patches are:')
@@ -25308,4 +25331,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-#6ca9faed36557df95149c4c07c689231a96745791ae5e5b32897cfd5ecfb59a2c0c26e3b46ecffd0acadf1c6733ed4c684e3d19f1648a304dbced1eadbd4373857f04f2b617d29632c5f0cb7cc0afa3aafea510237671d4def42fd2ff2626a76f4a4e22258fc76945e0088406baf6dda530233a9b3b413b7a45af1632a1be63c4a848d6e0d2d8e6b15a76477fdfa30422a6765259e4ced4a07d5a95d235f556dbfbeecd5ade2acc9d3bd21149e7a42dec020893c83f57f57dd9797b2fdafa8520a7d1c7a54bdbda96a55bf039923fd9bad2892ad2aa950cdd98bdfebcdaea83a22b065ca0c6a81aa909d99d1c4846608787b5be21efb04cd9a0021406d8b33549d04f67ed83f62e0a5b49846e38f5b61e76a39e0b26e9335d7a7ca4b04ec66d73804547926fb08bf57c8b1a3e22694d1c46b3b102cb844c04788e0c8b909babb83c024d016bc0284b26eeb7043f71a1b2c5a6ee4d86d6e21aa2865c1eab0d6ab7f812d742a48f4c48532a3f3fa26fdea2575c6b3e82555d693eb00af590a448f149e8d6b55c942ccdbfe0b21bbeb291907016191ba9d652e8f8af129d78fcc9d2607b40a62414ef72a91f584dd8aa0aac12205ff17c1121dc5a5192dd36717c963c506e3593603d13939fbc8c77af652eabf4c9659dc45b76c6ce7d089cfddc850a5370feef866b77e15f3fd7727c89d48397d3f960e5dc514b79b97cc7223af
\ No newline at end of file
+#761c7eece12bb0bbfe842f64e1b88c72397bcdfaa667cb9a1c52796a8b12a2f557ffce58c3903830da2a39f78fe051e5fcdf155201dba4f0805e2dae5826f98d25de065d0c0dbae17bd44af8b699c935e8ed49785126c09a94a2dfbd5a6f1f62149bf6f39e9c625f0b90e19e6d866e41d1db2bb4202ed4b8429ca9883e723c590391002ce98bd5959f26986ef1057351be79aef371cf813107c92f8be282a276be57973946bfa7171653cdaf48b96f595c064ad6213444f79a9c52d0bf1343be9c62212964dbbff18d320d2c71ce85afd3320c0dd3771a375436c8f2bc4fef5a4767f57bfac41591b3ebf416331e1c7da161672644c377cf303ea65d3883c5038f2d9cbcc55962a7af44e6ea962aa768915a2df5e8fe211ec994d7bf984382e51bf0b469b4e532fbba72bb4d52b1b70893366bdae1e1ed80d85d413bd35d77175ab0bf14989563b802580dc5c8d338af3302103250a9c35097fefca01360ccda1973ec8aead7863ef0a992337486149c7c20f45a9d95b3da201aa2681b83e5f7b4779a48fe7d79ee3671214ce5cc78b5585610f52e7751ad5cc2abf191db9f8db782180d4bf7a8fc81b13707008073e97d391f9688c1d8236c6e72cdc9f349fe0bf80a28242adebf99fe76729c895960344515bf9501b37768deaf390bd83a56609dc241c22cb8e2ed663623f039b8739b27113cee13225e574e8f70aaa0ff66
\ No newline at end of file
From 73d65ffdc1bcd544608cc77cef1e421a30d1dc78 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Fri, 24 Jun 2022 09:15:05 -0400
Subject: [PATCH 086/467] Fix for ColorChooser Button filling in None when
dialog is cancelled
---
PySimpleGUI.py | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index ac836e2d..61b12a2a 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.49 Unreleased"
+version = __version__ = "4.60.0.50 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -122,7 +122,9 @@ _change_log = """
4.60.0.49
Added Window.set_size to match the other settings that are performed through method calls. There is also the Window.size property, but
since PySimpleGUI rarely uses properties, it makes sense to include a method as well as a property
-
+ 4.60.0.50
+ Fix for ColorChooser button filling in a None value when cancel from color choise dialog box. Nothing will be filled in target if dialog cancelled
+
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -4964,8 +4966,9 @@ class Button(Element):
elif self.BType == BUTTON_TYPE_COLOR_CHOOSER:
color = tk.colorchooser.askcolor(parent=self.ParentForm.TKroot, color=self.default_color) # show the 'get file' dialog box
color = color[1] # save only the #RRGGBB portion
- strvar.set(color)
- self.TKStringVar.set(color)
+ if color is not None:
+ strvar.set(color)
+ self.TKStringVar.set(color)
elif self.BType == BUTTON_TYPE_BROWSE_FILES:
if running_mac():
# Workaround for the "*.*" issue on Mac
From 3113cc6d364cd060a8968fa4a16e724fd29ec6c3 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Fri, 24 Jun 2022 09:35:07 -0400
Subject: [PATCH 087/467] Addition of Window.set_size to SDK Call Reference doc
---
docs/call reference.md | 15 +++++++++++++++
.../markdown input files/5_call_reference.md | 4 +++-
readme_creator/output/call reference.md | 15 +++++++++++++++
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/docs/call reference.md b/docs/call reference.md
index a0c20072..5b769deb 100644
--- a/docs/call reference.md
+++ b/docs/call reference.md
@@ -13733,6 +13733,21 @@ Parameter Descriptions:
|--|--|--|
| (int, int) | size | (width, height) tuple (int, int) of the desired window size in pixels |
+### set_size
+
+Changes the size of the window, if possible. You can also use the Window.size prooerty
+to set/get the size.
+
+```
+set_size(size)
+```
+
+Parameter Descriptions:
+
+|Type|Name|Meaning|
+|--|--|--|
+| (int, int) | size | (width, height) of the desired window size |
+
### set_title
Change the title of the window
diff --git a/readme_creator/markdown input files/5_call_reference.md b/readme_creator/markdown input files/5_call_reference.md
index 1d9f56ed..50a244f6 100644
--- a/readme_creator/markdown input files/5_call_reference.md
+++ b/readme_creator/markdown input files/5_call_reference.md
@@ -3005,7 +3005,6 @@ Example: If first row has a `VPush`, then your layout will be At the bottom of
### move_to_center
-
### normal
@@ -3042,6 +3041,9 @@ Example: If first row has a `VPush`, then your layout will be At the bottom of
### set_min_size
+### set_size
+
+
### set_title
diff --git a/readme_creator/output/call reference.md b/readme_creator/output/call reference.md
index a0c20072..5b769deb 100644
--- a/readme_creator/output/call reference.md
+++ b/readme_creator/output/call reference.md
@@ -13733,6 +13733,21 @@ Parameter Descriptions:
|--|--|--|
| (int, int) | size | (width, height) tuple (int, int) of the desired window size in pixels |
+### set_size
+
+Changes the size of the window, if possible. You can also use the Window.size prooerty
+to set/get the size.
+
+```
+set_size(size)
+```
+
+Parameter Descriptions:
+
+|Type|Name|Meaning|
+|--|--|--|
+| (int, int) | size | (width, height) of the desired window size |
+
### set_title
Change the title of the window
From 533ab49c9000b5968d2f19568dea4b565ad3d28b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sat, 25 Jun 2022 06:06:31 -0400
Subject: [PATCH 088/467] Added background_color parm to vtop, vcenter, vbottom
helper functions. Added USING the expand_x and expand_y parms to vcenter and
vbottom that were in the definition but unused
---
PySimpleGUI.py | 83 ++++++++++++++++++++++++++++----------------------
1 file changed, 47 insertions(+), 36 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 61b12a2a..2b07984b 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.50 Unreleased"
+version = __version__ = "4.60.0.51 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -124,6 +124,9 @@ _change_log = """
since PySimpleGUI rarely uses properties, it makes sense to include a method as well as a property
4.60.0.50
Fix for ColorChooser button filling in a None value when cancel from color choise dialog box. Nothing will be filled in target if dialog cancelled
+ 4.60.0.51
+ vtop, vcenter, vbottom helper functions gets background_color parameter
+ vcenter and vbottom - added USING the expand_x and expand_y parms that were already defined. (HOPE NOTHING BREAKS!)
"""
@@ -12551,64 +12554,72 @@ def pin(elem, vertical_alignment=None, shrink=True, expand_x=None, expand_y=None
return Column([[elem]], pad=(0, 0), vertical_alignment=vertical_alignment, expand_x=expand_x, expand_y=expand_y)
-def vtop(elem_or_row, expand_x=None, expand_y=None):
+def vtop(elem_or_row, expand_x=None, expand_y=None, background_color=None):
"""
Align an element or a row of elements to the top of the row that contains it
- :param elem_or_row: the element or row of elements
- :type elem_or_row: Element | List[Element] | Tuple[Element]
- :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_x: (bool)
- :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_y: (bool)
- :return: A column element containing the provided element aligned to the top or list of elements (a row)
- :rtype: Column | List[Column]
+ :param elem_or_row: the element or row of elements
+ :type elem_or_row: Element | List[Element] | Tuple[Element]
+ :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_x: (bool)
+ :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_y: (bool)
+ :param background_color: Background color for container that is used by vtop to do the alignment
+ :type background_color: str | None
+ :return: A column element containing the provided element aligned to the top or list of elements (a row)
+ :rtype: Column | List[Column]
"""
+
if isinstance(elem_or_row, list) or isinstance(elem_or_row, tuple):
- return [Column([[e]], pad=(0, 0), vertical_alignment='top', expand_x=expand_x, expand_y=expand_y) for e in elem_or_row]
+ return [Column([[e]], pad=(0, 0), vertical_alignment='top', expand_x=expand_x, expand_y=expand_y, background_color=background_color) for e in elem_or_row]
- return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='top', expand_x=expand_x, expand_y=expand_y)
+ return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='top', expand_x=expand_x, expand_y=expand_y, background_color=background_color)
-def vcenter(elem_or_row, expand_x=None, expand_y=None):
+def vcenter(elem_or_row, expand_x=None, expand_y=None, background_color=None):
"""
Align an element or a row of elements to the center of the row that contains it
- :param elem_or_row: the element or row of elements
- :type elem_or_row: Element | List[Element] | Tuple[Element]
- :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_x: (bool)
- :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_y: (bool)
- :return: A column element containing the provided element aligned to the center or list of elements (a row)
- :rtype: Column | List[Column]
+ :param elem_or_row: the element or row of elements
+ :type elem_or_row: Element | List[Element] | Tuple[Element]
+ :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_x: (bool)
+ :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_y: (bool)
+ :param background_color: Background color for container that is used by vcenter to do the alignment
+ :type background_color: str | None
+ :return: A column element containing the provided element aligned to the center or list of elements (a row)
+ :rtype: Column | List[Column]
"""
if isinstance(elem_or_row, list) or isinstance(elem_or_row, tuple):
- return [Column([[e]], pad=(0, 0), vertical_alignment='center') for e in elem_or_row]
+ return [Column([[e]], pad=(0, 0), vertical_alignment='center',expand_x=expand_x, expand_y=expand_y, background_color=background_color) for e in elem_or_row]
- return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='center')
+ return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='center', expand_x=expand_x, expand_y=expand_y,background_color=background_color)
-def vbottom(elem_or_row, expand_x=None, expand_y=None):
+def vbottom(elem_or_row, expand_x=None, expand_y=None, background_color=None):
"""
Align an element or a row of elements to the bottom of the row that contains it
- :param elem_or_row: the element or row of elements
- :type elem_or_row: Element | List[Element] | Tuple[Element]
- :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_x: (bool)
- :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
- :type expand_y: (bool)
- :return: A column element containing the provided element aligned to the bottom or list of elements (a row)
- :rtype: Column | List[Column]
+ :param elem_or_row: the element or row of elements
+ :type elem_or_row: Element | List[Element] | Tuple[Element]
+ :param expand_x: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_x: (bool)
+ :param expand_y: If True/False the value will be passed to the Column Elements used to make this feature
+ :type expand_y: (bool)
+ :param background_color: Background color for container that is used by vcenter to do the alignment
+ :type background_color: str | None
+ :return: A column element containing the provided element aligned to the bottom or list of elements (a row)
+ :rtype: Column | List[Column]
"""
- if isinstance(elem_or_row, list) or isinstance(elem_or_row, tuple):
- return [Column([[e]], pad=(0, 0), vertical_alignment='bottom') for e in elem_or_row]
- return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='bottom')
+ if isinstance(elem_or_row, list) or isinstance(elem_or_row, tuple):
+ return [Column([[e]], pad=(0, 0), vertical_alignment='bottom', expand_x=expand_x, expand_y=expand_y, background_color=background_color) for e in elem_or_row]
+
+ return Column([[elem_or_row]], pad=(0, 0), vertical_alignment='bottom', expand_x=expand_x, expand_y=expand_y,background_color=background_color)
def Titlebar(title='', icon=None, text_color=None, background_color=None, font=None, key=None, k=None):
@@ -25334,4 +25345,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-#761c7eece12bb0bbfe842f64e1b88c72397bcdfaa667cb9a1c52796a8b12a2f557ffce58c3903830da2a39f78fe051e5fcdf155201dba4f0805e2dae5826f98d25de065d0c0dbae17bd44af8b699c935e8ed49785126c09a94a2dfbd5a6f1f62149bf6f39e9c625f0b90e19e6d866e41d1db2bb4202ed4b8429ca9883e723c590391002ce98bd5959f26986ef1057351be79aef371cf813107c92f8be282a276be57973946bfa7171653cdaf48b96f595c064ad6213444f79a9c52d0bf1343be9c62212964dbbff18d320d2c71ce85afd3320c0dd3771a375436c8f2bc4fef5a4767f57bfac41591b3ebf416331e1c7da161672644c377cf303ea65d3883c5038f2d9cbcc55962a7af44e6ea962aa768915a2df5e8fe211ec994d7bf984382e51bf0b469b4e532fbba72bb4d52b1b70893366bdae1e1ed80d85d413bd35d77175ab0bf14989563b802580dc5c8d338af3302103250a9c35097fefca01360ccda1973ec8aead7863ef0a992337486149c7c20f45a9d95b3da201aa2681b83e5f7b4779a48fe7d79ee3671214ce5cc78b5585610f52e7751ad5cc2abf191db9f8db782180d4bf7a8fc81b13707008073e97d391f9688c1d8236c6e72cdc9f349fe0bf80a28242adebf99fe76729c895960344515bf9501b37768deaf390bd83a56609dc241c22cb8e2ed663623f039b8739b27113cee13225e574e8f70aaa0ff66
\ No newline at end of file
+#28c10f5508ea3165693bb10025bed194bfb621d2db0722e1192b450154d6917e80ba08237d56e68531d26a71f487c7166483e057497eb2628014274eae4b9d355f79152bfb81bd382e1f5561bced21dd4f3e45678d8cad45edefba84010f2f6a62df3a4405725c56dff48d22a41ba2d9ee090a1089199f83c563e6668b27fb4dc419917d01a16a8979c561267b23f73f7f4dd34aa88b54e1ca1eb157100e04223f8ba958e87ba3f6e0c34ca5b7a1e6c8de5d08abdd84ba7f447851b153c1f76965bb73e0fe74e901413cb4809fdc2c7a0cd1565734a6d18030ea1d7d2b7cf46f5aaf232db587d78f939fcaba862cb071d8c277494c30cdc25fcc9c68047b7d759a92f45e95556fc4339bb7b4f1b9ef069860d693830f3a9cac75671e14634bb9fe4912b5c59c704ecf003e067cef615105bdfedf470707d86bb417bf2d12889df0f7258efc8a6d9075405783ff845076efa368c91cbc4d5d437791dd90c5c3cc36fef36deb6de910489686be0aad629a383b582e81c14ecae39b752488adf8e36dda014176356474afc3c5c36dc6f78dbf55beb8762f6cd0fe7840ae266a6b0befbb14ff1367271f7c37255b92f2ea7adc3045bc99b618273a4ca0708fe83b4376decde5e00a57fa62e7145bcbc5177e11ac3127c7a559063b3b749bfc5ab5db471bfb141a8a6343fd8a5402c93b037ff7002cbfc50b59ca4bec96b0ea5e5c3d
\ No newline at end of file
From 43ea63bb7ccbb76d73bbf33907860945d7b9f708 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Mon, 27 Jun 2022 13:34:25 -0400
Subject: [PATCH 089/467] Added justification parameter to Listbox Element
---
PySimpleGUI.py | 26 +++++++++++++++++++-------
1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index 2b07984b..aea2c581 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.51 Unreleased"
+version = __version__ = "4.60.0.52 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -127,6 +127,8 @@ _change_log = """
4.60.0.51
vtop, vcenter, vbottom helper functions gets background_color parameter
vcenter and vbottom - added USING the expand_x and expand_y parms that were already defined. (HOPE NOTHING BREAKS!)
+ 4.60.0.52
+ justification parameter added to Listbox (default is left.. can be right and center now too)
"""
@@ -2566,7 +2568,7 @@ class Listbox(Element):
"""
def __init__(self, values, default_values=None, select_mode=None, change_submits=False, enable_events=False,
- bind_return_key=False, size=(None, None), s=(None, None), disabled=False, auto_size_text=None, font=None, no_scrollbar=False, horizontal_scroll=False,
+ bind_return_key=False, size=(None, None), s=(None, None), disabled=False, justification=None, auto_size_text=None, font=None, no_scrollbar=False, horizontal_scroll=False,
background_color=None, text_color=None, highlight_background_color=None, highlight_text_color=None,
sbar_trough_color=None, sbar_background_color=None, sbar_arrow_color=None, sbar_width=None, sbar_arrow_width=None, sbar_frame_color=None, sbar_relief=None,
key=None, k=None, pad=None, p=None, tooltip=None, expand_x=False, expand_y=False,right_click_menu=None, visible=True, metadata=None):
@@ -2589,6 +2591,8 @@ class Listbox(Element):
:type s: (int, int) | (None, None) | int
:param disabled: set disable state for element
:type disabled: (bool)
+ :param justification: justification for items in listbox. Valid choices - left, right, center. Default is left
+ :type justification: (str)
:param auto_size_text: True if element should be the same size as the contents
:type auto_size_text: (bool)
:param font: specifies the font family, size, etc. Tuple or Single string format 'name size styles'. Styles: italic * roman bold normal underline overstrike
@@ -2676,6 +2680,7 @@ class Listbox(Element):
pad = pad if pad is not None else p
self.expand_x = expand_x
self.expand_y = expand_y
+ self.justification = justification
super().__init__(ELEM_TYPE_INPUT_LISTBOX, size=sz, auto_size_text=auto_size_text, font=font,
background_color=bg, text_color=fg, key=key, pad=pad, tooltip=tooltip, visible=visible, metadata=metadata,
@@ -15899,9 +15904,19 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
element_frame = tk.Frame(tk_row_frame)
element.element_frame = element_frame
+ justification = tk.LEFT
+ if element.justification is not None:
+ if element.justification.startswith('l'):
+ justification = tk.LEFT
+ elif element.justification.startswith('r'):
+ justification = tk.RIGHT
+ elif element.justification.startswith('c'):
+ justification = tk.CENTER
+
element.TKStringVar = tk.StringVar()
element.TKListbox = element.Widget = tk.Listbox(element_frame, height=element_size[1], width=width,
- selectmode=element.SelectMode, font=font, exportselection=False)
+ selectmode=element.SelectMode, font=font, exportselection=False,
+ justify=justification)
element.Widget.config(highlightthickness=0)
for index, item in enumerate(element.Values):
element.TKListbox.insert(tk.END, item)
@@ -15918,9 +15933,6 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
if element.ChangeSubmits:
element.TKListbox.bind('<>', element._ListboxSelectHandler)
-
-
-
if not element.NoScrollbar:
_make_ttk_scrollbar(element, 'v', toplevel_form)
element.Widget.configure(yscrollcommand=element.vsb.set)
@@ -25345,4 +25357,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-#28c10f5508ea3165693bb10025bed194bfb621d2db0722e1192b450154d6917e80ba08237d56e68531d26a71f487c7166483e057497eb2628014274eae4b9d355f79152bfb81bd382e1f5561bced21dd4f3e45678d8cad45edefba84010f2f6a62df3a4405725c56dff48d22a41ba2d9ee090a1089199f83c563e6668b27fb4dc419917d01a16a8979c561267b23f73f7f4dd34aa88b54e1ca1eb157100e04223f8ba958e87ba3f6e0c34ca5b7a1e6c8de5d08abdd84ba7f447851b153c1f76965bb73e0fe74e901413cb4809fdc2c7a0cd1565734a6d18030ea1d7d2b7cf46f5aaf232db587d78f939fcaba862cb071d8c277494c30cdc25fcc9c68047b7d759a92f45e95556fc4339bb7b4f1b9ef069860d693830f3a9cac75671e14634bb9fe4912b5c59c704ecf003e067cef615105bdfedf470707d86bb417bf2d12889df0f7258efc8a6d9075405783ff845076efa368c91cbc4d5d437791dd90c5c3cc36fef36deb6de910489686be0aad629a383b582e81c14ecae39b752488adf8e36dda014176356474afc3c5c36dc6f78dbf55beb8762f6cd0fe7840ae266a6b0befbb14ff1367271f7c37255b92f2ea7adc3045bc99b618273a4ca0708fe83b4376decde5e00a57fa62e7145bcbc5177e11ac3127c7a559063b3b749bfc5ab5db471bfb141a8a6343fd8a5402c93b037ff7002cbfc50b59ca4bec96b0ea5e5c3d
\ No newline at end of file
+#81c3d611f0876569b714bfead31610fd397248595b3b2ebc96bd33600bbcbdcce50013a4f1471a65a24bc8b842b82e0c2083023fe4a9db7d76763f46b34df27cc47d5d27f38eaeec8824af4291b6cc9f53ccb9e4b73a37f3a6b6feb8a726076b105241559fd328fd30f3684e18dacc74c19fdb45077d4ef644fbfd9e7307063246f400f1765357036297d6d6dc9ab74593e6cfd8a0eb5449eea36fd76a65f46953ddbb992b54966e537aa735ff44ee7df9234163669a318e1d2aa8d530673fb0fb8ef3871ce280f977d29de0ec04e7eac393eb9bce1452d9e666de6b0391ba7f3f03395fed40586fa494611127a188a4a13cf703e20118da73a8ba33c17297f2f0b7f44b2677216786b5b32479021b03d233379c66d75aa971e5dd5b497f0759a014f2bb8fbed86ea30fb32fd49a9f1b2f53f6fd61e7e4f265e6a501e675f805079a6a1a2e5394d49bf8fa3911562d8f1c999f8775f0ad818e1e0f421c12190d426b49c426adbe84a0a5433e82b265407eea9758d283770069e854128d1ce66b66de7f59256920d1297076ea9560675f7950c24ab3bd2f60ad317ef8e8013ca06ce44802ddb44df756c35f312c34b0dd1b5e02cd2f947dfba588c90c7c3a366dbae4036bceb0c7ce18301ec5e7157212374939bc6e0ec22f7c1927ede9bbbb3e57b10c8fc39301492f47fe32d71361fe24400ea3be0c92de94e990d62d8ac662
\ No newline at end of file
From 05fd8ca8914e97d41af55fea92f51c8c0aacc702 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 30 Jun 2022 15:30:25 -0400
Subject: [PATCH 090/467] Test eCookbook Integration
---
...uting-custom-events-through-window-read.md | 8 ++
docs/eCookbook/animation/animated-gifs.md | 20 ++++
.../desktop-timer-widget.md | 1 +
.../custom-checkboxes.md | 20 ++++
.../custom-radio-buttons.md | 11 ++
.../toggle-button-super-simple.md | 26 +++++
.../toggle-buttons.md | 22 ++++
.../custom-menubars.md | 13 +++
.../custom-titlebars.md | 107 ++++++++++++++++++
.../demo-programs/all-elements-simple-view.md | 40 +++++++
.../chat-instant-message-front-end.md | 14 +++
docs/eCookbook/demo-programs/control-panel.md | 13 +++
.../design-pattern-1-the-one-shot.md | 32 ++++++
...attern-2-persistent-window-with-updates.md | 20 ++++
.../demo-programs/informe-os-dados.md | 51 +++++++++
.../demo-programs/intro-to-this-page.md | 65 +++++++++++
docs/eCookbook/demo-programs/menu-bar.md | 15 +++
docs/eCookbook/demo-programs/menus.md | 24 ++++
.../demo-programs/multi-threaded-work.md | 29 +++++
.../psgdemos-pip-installable-demo-programs.md | 22 ++++
docs/eCookbook/demo-programs/settings-file.md | 22 ++++
docs/eCookbook/demo-programs/simple-form.md | 12 ++
.../the-basic-pysimplegui-program.md | 49 ++++++++
.../ti-datamath-ii-calculator.md | 12 ++
.../1-4-24-dice-game.md | 21 ++++
...re-game-popup-windows-with-delayed-text.md | 15 +++
.../examples-for-reddit-posts/calculator.md | 24 ++++
.../change-slider-based-on-input.md | 9 ++
.../choose-file-from-a-list.md | 8 ++
.../coin-calculator.md | 19 ++++
.../countdown-timer.md | 11 ++
.../counters-using-keyboard.md | 6 +
.../dashboard-mockup-for-a-car.md | 12 ++
.../distance-calculator.md | 8 ++
.../examples-for-reddit-posts/fade-window.md | 9 ++
.../input-2-fields.md | 8 ++
.../ipynb-to-py-converter.md | 15 +++
.../kilometer-to-mile-converter-for-reddit.md | 20 ++++
.../examples-for-reddit-posts/login.md | 7 ++
.../machinerys-handbook.md | 18 +++
.../maze-solution-finder.md | 21 ++++
.../multiple-entry-in-same-window.md | 15 +++
.../navigating-focus.md | 13 +++
.../password-entry.md | 6 +
.../pi-temperature-control.md | 21 ++++
.../png-image-viewer.md | 8 ++
.../printing-to-a-gui-window.md | 18 +++
.../reddit-c-to-c-frontend.md | 8 ++
.../reddit-multiple-rows-option-menu.md | 4 +
.../reddit-scraper.md | 21 ++++
.../sales-commission-calculator.md | 12 ++
.../shopify-reddit-mockup.md | 23 ++++
.../spectrophotometry-from-twitter.md | 16 +++
.../stats-the-update-periodically.md | 6 +
.../text-adventure.md | 16 +++
.../examples-for-reddit-posts/tic-tac-toe.md | 37 ++++++
.../ticket-reservation.md | 22 ++++
.../visual-basic-mockup.md | 24 ++++
.../visual-basic-to-python.md | 16 +++
docs/eCookbook/games/battleship.md | 34 ++++++
docs/eCookbook/games/conways-game-of-life.md | 14 +++
docs/eCookbook/games/dice-roller.md | 16 +++
docs/eCookbook/games/minesweeper.md | 33 ++++++
docs/eCookbook/games/sudoku.md | 44 +++++++
docs/eCookbook/games/uno-card-game.md | 12 ++
docs/eCookbook/games/wordle.md | 8 ++
.../graph-element/animated-line-graph.md | 1 +
.../graph-element/dashboard-mockup.md | 18 +++
.../graph-element/fourier-animated-graph.md | 16 +++
.../graph-element/graph-element-bar-chart.md | 51 +++++++++
.../graph-element-drag-a-square.md | 19 ++++
.../graph-element-drawing-and-dragging.md | 15 +++
.../graph-element-line-graph-with-labels.md | 9 ++
.../graph-element/graph-element-sine-wave.md | 8 ++
docs/eCookbook/graph-element/utah-teapot.md | 18 +++
.../graph-element/visualizing-sorts.md | 11 ++
docs/eCookbook/layouts/centered-and-simple.md | 14 +++
.../eCookbook/layouts/collapsible-sections.md | 13 +++
.../fixed-size-columns-with-justification.md | 27 +++++
.../layouts/push-and-vpush-elements.md | 14 +++
.../layouts/swapping-window-layouts.md | 10 ++
.../to-do-list-using-generated-layout.md | 45 ++++++++
.../animated-matplotlib-line-graph.md | 1 +
.../matplotlib/matplotlib-plot-browser.md | 17 +++
.../matplotlib/matplotlib-simple-plot.md | 20 ++++
.../matplotlib/matplotlib-single-plot.md | 20 ++++
.../desktop-widget-launcher-bar.md | 41 +++++++
.../multi-threaded-long-task-simple.md | 8 ++
.../multi-threaded-long-task-using-queue.md | 10 ++
...multi-threaded-multiple-workder-threads.md | 8 ++
.../multi-threaded-write-event-value.md | 39 +++++++
.../window-perform_long_operation-method.md | 37 ++++++
...le-window-2-window-basic-design-pattern.md | 4 +
.../multiple-windows/read-all-windows.md | 12 ++
.../two-windows-with-re-open.md | 13 +++
.../quiz-example-from-geekforgeeks.md | 33 ++++++
docs/eCookbook/tables/mono-spaced-fonts.md | 27 +++++
...avigate-using-arrow-keys-sort-by-column.md | 15 +++
docs/eCookbook/tables/simulated-tables.md | 16 +++
.../table-element-getting-click-events.md | 16 +++
docs/eCookbook/tables/the-table-element.md | 9 ++
...tiline-text-output-with-multiple-colors.md | 6 +
.../udemy-course.md | 21 ++++
docs/eCookbook/user-settings/ini-files.md | 24 ++++
.../usersettings-as-a-simple-database.md | 8 ++
.../language-selection.md | 8 ++
.../base64-button-graphics.md | 16 +++
.../color-chooser-window.md | 33 ++++++
.../fade-in-fade-out-notification-windows.md | 15 +++
109 files changed, 2092 insertions(+)
create mode 100644 docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
create mode 100644 docs/eCookbook/animation/animated-gifs.md
create mode 100644 docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
create mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
create mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
create mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
create mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
create mode 100644 docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
create mode 100644 docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
create mode 100644 docs/eCookbook/demo-programs/all-elements-simple-view.md
create mode 100644 docs/eCookbook/demo-programs/chat-instant-message-front-end.md
create mode 100644 docs/eCookbook/demo-programs/control-panel.md
create mode 100644 docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
create mode 100644 docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
create mode 100644 docs/eCookbook/demo-programs/informe-os-dados.md
create mode 100644 docs/eCookbook/demo-programs/intro-to-this-page.md
create mode 100644 docs/eCookbook/demo-programs/menu-bar.md
create mode 100644 docs/eCookbook/demo-programs/menus.md
create mode 100644 docs/eCookbook/demo-programs/multi-threaded-work.md
create mode 100644 docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
create mode 100644 docs/eCookbook/demo-programs/settings-file.md
create mode 100644 docs/eCookbook/demo-programs/simple-form.md
create mode 100644 docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
create mode 100644 docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/calculator.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/fade-window.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/login.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/password-entry.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/text-adventure.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
create mode 100644 docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
create mode 100644 docs/eCookbook/games/battleship.md
create mode 100644 docs/eCookbook/games/conways-game-of-life.md
create mode 100644 docs/eCookbook/games/dice-roller.md
create mode 100644 docs/eCookbook/games/minesweeper.md
create mode 100644 docs/eCookbook/games/sudoku.md
create mode 100644 docs/eCookbook/games/uno-card-game.md
create mode 100644 docs/eCookbook/games/wordle.md
create mode 100644 docs/eCookbook/graph-element/animated-line-graph.md
create mode 100644 docs/eCookbook/graph-element/dashboard-mockup.md
create mode 100644 docs/eCookbook/graph-element/fourier-animated-graph.md
create mode 100644 docs/eCookbook/graph-element/graph-element-bar-chart.md
create mode 100644 docs/eCookbook/graph-element/graph-element-drag-a-square.md
create mode 100644 docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
create mode 100644 docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
create mode 100644 docs/eCookbook/graph-element/graph-element-sine-wave.md
create mode 100644 docs/eCookbook/graph-element/utah-teapot.md
create mode 100644 docs/eCookbook/graph-element/visualizing-sorts.md
create mode 100644 docs/eCookbook/layouts/centered-and-simple.md
create mode 100644 docs/eCookbook/layouts/collapsible-sections.md
create mode 100644 docs/eCookbook/layouts/fixed-size-columns-with-justification.md
create mode 100644 docs/eCookbook/layouts/push-and-vpush-elements.md
create mode 100644 docs/eCookbook/layouts/swapping-window-layouts.md
create mode 100644 docs/eCookbook/layouts/to-do-list-using-generated-layout.md
create mode 100644 docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
create mode 100644 docs/eCookbook/matplotlib/matplotlib-plot-browser.md
create mode 100644 docs/eCookbook/matplotlib/matplotlib-simple-plot.md
create mode 100644 docs/eCookbook/matplotlib/matplotlib-single-plot.md
create mode 100644 docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
create mode 100644 docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
create mode 100644 docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
create mode 100644 docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
create mode 100644 docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
create mode 100644 docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
create mode 100644 docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
create mode 100644 docs/eCookbook/multiple-windows/read-all-windows.md
create mode 100644 docs/eCookbook/multiple-windows/two-windows-with-re-open.md
create mode 100644 docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
create mode 100644 docs/eCookbook/tables/mono-spaced-fonts.md
create mode 100644 docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
create mode 100644 docs/eCookbook/tables/simulated-tables.md
create mode 100644 docs/eCookbook/tables/table-element-getting-click-events.md
create mode 100644 docs/eCookbook/tables/the-table-element.md
create mode 100644 docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
create mode 100644 docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
create mode 100644 docs/eCookbook/user-settings/ini-files.md
create mode 100644 docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
create mode 100644 docs/eCookbook/user-submitted-examples/language-selection.md
create mode 100644 docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
create mode 100644 docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
create mode 100644 docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
diff --git a/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md b/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
new file mode 100644
index 00000000..9c7370fa
--- /dev/null
+++ b/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
@@ -0,0 +1,8 @@
+This example shows how you can use a new capability in PySimpleGUI.... the ability to create custom events that will be returned to you through your call to `window.read()`.
+
+In this case, the desired events are when a window receives and loses focus. This is an advanced capability that most applications don't need, but it's nice to know it's available should you need it.
+
+The same kind of constructions can be used to bind right clicks to buttons for example.
+
+
+
diff --git a/docs/eCookbook/animation/animated-gifs.md b/docs/eCookbook/animation/animated-gifs.md
new file mode 100644
index 00000000..a85dac2e
--- /dev/null
+++ b/docs/eCookbook/animation/animated-gifs.md
@@ -0,0 +1,20 @@
+**Animated GIFs**
+
+Animated GIFs are shown by repeatedly calling a PySimpleGUI function or method on a frequent basis.
+
+***A critical fact to understand ***is that you must make a call for every frame you wish to show. These functions are not **ones** that automatically playback and entire GIF on your behalf. You must make a call for every frame to be displayed.
+
+The timing of the calls is not important for your application to keep track of. PySimpleGUI will figure out if enough time has elapsed for the next frame to be shown. In other words, your application does not have to accurately measure the time between frames and perform delays.
+
+Instead of the application keeping track of the time, PySimpleGUI keeps track of how much time has elapsed since the last frame was shown. If enough time has elapsed that another frame should be shown, then the next frame will be shown. It not enough time has passed, then nothing about the image is changed. The last frame shown will remain the one showing.
+
+
+This program will shows animations using 2 different methods.
+1. By calling `popup_animated`
+2. By calling `Image.update_animation`
+
+In both cases, a loop is involved.
+
+The first animation played uses `popup_animated`. You cannot interrupt this particular animation. It plays until complete. The remaining animations can be clicked in order to advance to the next animation. When the last GIF is reached, clicking it will do nothing. It will play forever.
+
+
diff --git a/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md b/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
new file mode 100644
index 00000000..60a508b6
--- /dev/null
+++ b/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
new file mode 100644
index 00000000..0da1f2b7
--- /dev/null
+++ b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
@@ -0,0 +1,20 @@
+## Custom Checkboxes
+
+A common complaint I've heard from Python programmers are how dated the GUI look. With PySimpleGUI this is a problem that's easy to overcome. It's trivial in fact.
+
+In this very short example, you'll see how making checkboxes look any way you want them to look by using Base64 encoded PNG images. There is a PySimpleGUI utility that makes the job even easier! `pip install psgresizer`to get the psgresizer tool that I used to create these checkboxes. This tool will encode an image into a Base64 encoded bytestring that is placed on the clipboard, ready for you to paste into your code. It will take you under 5 minutes, if that, to have checkboxes of any style you want.
+
+### `psgresizer`
+
+This is a screenshot of the psgresizer tool that you can pip install and run from the command line.
+
+
+
+The program is quite small that demonstrates the custom checkboxes. Instead of specifying a `Checkbox` element as you would normally, you use an `Image` element. Setting the `enable_events` parameter will cause an event to be generated when the user clicks the checkbox. You can then change the image shown in your event loop when you detect the checkbox has been clicked.
+
+This is how this Custom Checkbox program appears when running on Windows.
+
+
+
+
+
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
new file mode 100644
index 00000000..606dc648
--- /dev/null
+++ b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
@@ -0,0 +1,11 @@
+## Custom Radio Buttons
+
+Getting a GUI that's attractive isn't impossible using PySimpleGUI. tkinter catches a lot of "ugly" comments. It doesn't HAVE To be though. PySimpleGUI makes creating your own custom controls ***trivial***.
+
+There are a number of ways to go about something like this. I've chosen a simple approach of using an Image Element and a Text Element.
+
+The Image Elements are used to create a simple graphic that represents the state of the radio button. The images are included in the code as base64 encoded graphics. Because they are based on PNG files, they have an alpha channel and will blend with whatever kind of background you place them on. They are either on or off.
+
+Both the Image Element and the Text Element next to it have the events enabled on those elements. This will create an event if either of them are clicked, which mirrors the behavior of a Radio Button. The "State" of the button is simply stored as Metadata in the Image Element.
+
+
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
new file mode 100644
index 00000000..7563af17
--- /dev/null
+++ b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
@@ -0,0 +1,26 @@
+## Toggle Button - Super Simple
+
+This demo shows you how to make a toggle button using 2 methods.
+
+1. A Button that changes color and text
+2. A Button with a graphic that changes
+
+
+It's a simple way to get a toggle button in PySimpleGUI using the Button Element.
+
+
+
+## Toggle Button - Super Simple Graphic Only
+
+And this one is even more simplified.
+
+
+
+
+
+## Toggle Button - Simple Graphic - No Button Animation
+
+Maybe you don't want the graphic to move up and down like a button does. Not a problem....just switch from Button to Image.
+
+
+
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
new file mode 100644
index 00000000..d156609e
--- /dev/null
+++ b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
@@ -0,0 +1,22 @@
+# Toggle Buttons with Disable
+
+This example shows a 4-state toggle button.
+
+Normally a toggle button has 2 states:
+1. On
+2. Off
+
+Buttons can also be disabled. When using PySimpleGUI to disable buttons, it will use the underlying GUI Framework's disable which usually adds a gray overlay or change the text to gray.
+
+In the 4.35.0 release of PySimpleGUI, a new button state was added.... an "ignore". This state means that the button will not generate events. Unlike disable, ignore does not use the GUI framework's disable capability, thus it will not change the color.
+
+This example program has these 4 states for the toggle button:
+1. On
+2. Off
+3. On and disabled
+4. Off and disabled
+
+Disabled in this specific situation means ignore. The program itself is making the button appear to be disabled.
+
+
+
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
new file mode 100644
index 00000000..5c83c854
--- /dev/null
+++ b/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
@@ -0,0 +1,13 @@
+## MenubarCustom
+
+These are automatically paired with the custom titlebars, but you can also use them with normal titlebar.
+
+Here on Trinket, all Titlebars are custom and thus all menubars are also custom
+
+This Trinket program is also shown in the other Demo Programs page marked CustomTitlebars.
+
+
+
+
+
+
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
new file mode 100644
index 00000000..2132e338
--- /dev/null
+++ b/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
@@ -0,0 +1,107 @@
+## Custom Titlebars & Custom Menubars - Bringing Some Style to Windows
+
+One problem with running on Trinket is the lack of titlebars. Titlebars and Menubars are provided by the OS. Like all things software, it's a wonferfully terrible thing.
+
+Wonderful that they just work. Terrible that the colors are not changable.
+
+As Trinket has become a more and more important tool in the edcuation of PySimpleGUI programmers, the lack of a Titlebar wsa becoming a serious problem. Additionally, that aforementioned lack of color and other controls means your wonderful dark themed PySimpleGUI window is likely to have an entirely non-matching titlebar.
+
+Let's look at both the default PySimpleGUI theme and a "Dark Red" theme.
+
+```python
+import PySimpleGUI as sg
+
+sg.theme('dark red')
+
+layout = [ [sg.Text('My Window')],
+ [sg.Input(key='-IN-')],
+ [sg.Button('Go'), sg.Button('Exit')] ]
+
+sg.Window('Window Title', layout).read(close=True)
+
+```
+
+If no theme is set for the window, we get this lovely window
+
+
+
+Setting "Dark Red" produces this one
+
+
+
+
+They're not terrible by ANY stretch, espcecially given they're all of 4 lines long. But, they can certainly be made a bit more attractive and this is where the custom titlebar comes in. Not only does it solve a problem of a missting titlebar entirely on Trinket, but it also gives us very attractive windows on all platforms
+
+By adding the parameter `use_custom_titlebar=True`....
+
+```python
+sg.Window('Window Title', layout, use_custom_titlebar=True).read(close=True)
+
+```
+
+Our windows become these on Windows
+
+
+
+
+
+
+-----------------------------
+
+## What About That "Trinket Problem"?
+
+As mentioned at the of this page, this custom titlebar journey bagan with a problem happening here on Trinket. Because there was no titlebar, ***always***, it meant our nice, simple window:
+
+```python
+import PySimpleGUI as sg
+
+sg.theme('dark red')
+
+layout = [ [sg.Text('My Window')],
+ [sg.Input(key='-IN-')],
+ [sg.Button('Go'), sg.Button('Exit')] ]
+
+sg.Window('Window Title', layout).read(close=True)
+
+```
+
+Always appeared like this on Trinket:
+
+
+
+That's not at all what Windows and Linux user experience. Not only was this a confusing situation, it was problematic should you want to move the window. There's no titlebar to grab and move the window.
+
+It's enough to drive a PySimpleGUI user crazy!
+
+
+
+
+## Custom Titlebar to the Rescue
+
+2021 was kicked off with release 4.33.0 on Jan 2, 2021. This is when the Custom Titlebar was released as part of PySimpleGUI. When PySimpleGUI detects that the program is running on Trinket, then a custom titlebar is added on your behalf, no additional code needed!
+
+Now your program above, the simple one, results in this window:
+
+
+
+
+
+Don't believe it? Let's give it a go and see how things work. Go ahead... poke the run button.
+
+
+
+You can modify this Trinket and you'll find that the Titlebar colors match your theme's colors (of course....).
+
+-------------------------------
+
+## Custom Menubars to Match
+
+Custom Menubars are now part of PySimpleGUI. You can get the effect of a Menubar that is styled in a way that matches your theme, by using using the MenubarCustom element.
+
+Like Custom Titlebars, it was initially released as a Demo Program. You can run this demo on Trinket here:
+
+
+
+
+
+
diff --git a/docs/eCookbook/demo-programs/all-elements-simple-view.md b/docs/eCookbook/demo-programs/all-elements-simple-view.md
new file mode 100644
index 00000000..76e7e1d4
--- /dev/null
+++ b/docs/eCookbook/demo-programs/all-elements-simple-view.md
@@ -0,0 +1,40 @@
+## All Elements - Listed in 1 Window
+
+This program is a slightly modified version of the Demo Program found in the PySimpleGUI repo:
+
+`Demo_All_Elements_Simple.py`
+
+
+The view of this window here on Trinket looks a little different than the code when run on Windows
+
+### Trinket
+
+
+
+
+### Windows 10
+
+
+
+### Titlebar and Menubar
+
+The thing I want to draw your attention to is the Titlebar and the Menubar.
+
+Because Trinket does not provide a Titlebar (it's the operating system's job to do this), PySimpleGUI provides one for you automatically. PySimpleGUI doesn't automatically switch your Menubar to a MenubarCustom which is what you need to use on Trinket for the 2 to match. The code in this Trinket has been modified to add the custom Menubar for you.
+
+
+### The code
+
+This demo was written to show you the "pallet of elements" that you have available to paint your GUI window with. It doesn't tell the full story however as you can expand these GREATLY by using PIL, the graph element, images for buttons, etc. What it does do is list all of the elements using 1 line of code per element. It can't get much simpler than that.
+
+
+### Theme Previewer
+
+This proram has a secondary function... you can see what all of the elements look like using the many PySimpleGUI Themes. Choose a new theme from the Combo element shown and the window will be remade with the new theme.
+
+For example, I chose the "Dark Grey 11" theme and was shown this window:
+
+
+
+
+
diff --git a/docs/eCookbook/demo-programs/chat-instant-message-front-end.md b/docs/eCookbook/demo-programs/chat-instant-message-front-end.md
new file mode 100644
index 00000000..6f6d0358
--- /dev/null
+++ b/docs/eCookbook/demo-programs/chat-instant-message-front-end.md
@@ -0,0 +1,14 @@
+Simple Chat program front end
+
+This demo was kept short and simple as to provide a foundation for something more elaborate (or not). Didn't want to make it so that you have to remove more code than you add.
+
+This program takes input from the user and uses print statements to output information to the window.
+
+A couple of features may not be what you're looking for and are easy to change are:
+* Enter key "sends" the message
+* After every send the input element is cleared
+
+This chat program is synchronous in its design. It gathers input, "sends" it or processes it in some manner and then outputs the results. If you need is more asynchronous, then you'll want to use a PySimpleGUI async design pattern instead of this more simple synchronous one.
+
+
+
diff --git a/docs/eCookbook/demo-programs/control-panel.md b/docs/eCookbook/demo-programs/control-panel.md
new file mode 100644
index 00000000..0cbce8b9
--- /dev/null
+++ b/docs/eCookbook/demo-programs/control-panel.md
@@ -0,0 +1,13 @@
+**Control Panel**
+
+Creates a grid of images with text labels that looks like a typical "control panel".
+
+Note that there is currently a bug with the `Column` Element where the mousewheel only scrolls the Column if mouse is directrly over the scrollwheel.
+
+This code contains a lot of Base64 Images in order to avoid needing to distributes a lot of individual image files with the code. This way a single source file has everything required.
+
+On Windows the window looks like this:
+
+
+
+
diff --git a/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md b/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
new file mode 100644
index 00000000..9c5cb035
--- /dev/null
+++ b/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
@@ -0,0 +1,32 @@
+**Design Pattern 1 - The One-Shot
+**
+Use this design pattern to show a window, get some input values and then close the window. The window is not meant to stick around for very long.
+
+
+
+
+An exciting development in 2019 was the addition of the `close` parameter to the `window.read()` call. This enables you to write single line GUIs (again), a capability that was around in the early days of PySimpleGUI but disappeared as persistent windows became the primary use.
+
+To make a single line, one-shot-GUI, you combine the layout into the call to `Window` itself. You also "chain" the call to read onto the end of your `Window` call.
+
+The result is a line that looks like this:
+```python
+event, values = sg.Window('My single-line GUI!',
+ [[sg.Text('My one-shot window.')],
+ [sg.InputText(key='-IN-')],
+ [sg.Submit(), sg.Cancel()]]).read(close=True)
+```
+
+
+
+
+
+
+You can take this approach one step further and parse out the input value directly into your variable by adding more code onto the end of the line. In this case, a subscript to pick up the second location in the tuple that's returned from `read` and then the key.
+
+```python
+event, values = sg.Window('My single-line GUI!',
+ [[sg.Text('My one-shot window.')],
+ [sg.InputText(key='-IN-')],
+ [sg.Submit(), sg.Cancel()]]).read(close=True)[1]['-IN-']
+```
diff --git a/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md b/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
new file mode 100644
index 00000000..afbb26c2
--- /dev/null
+++ b/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
@@ -0,0 +1,20 @@
+**Design Pattern 2 - Persistent Windows, output updates in window**
+
+
+***This is the most common design pattern you'll find in PySimpleGUI. ***
+
+It's the same across all of the ports of PySimpleGUI. You'll easily be able to recognize a PySimpleGUI program by this basic structure.
+
+This pattern is for windows that remain open with the user interacting with them. It's a "normal" window from a user's standpoint.
+
+*This pattern has 4 parts:*
+
+1. Layout definition
+2. Window creation
+3. Event loop - read window events and inputs
+4. Window close
+
+Each of these parts is 1 or 2 lines of Python code when working with a basic window. The size of the event loop depends on the amount of processing you need to do when events happen in the window.
+
+
+
diff --git a/docs/eCookbook/demo-programs/informe-os-dados.md b/docs/eCookbook/demo-programs/informe-os-dados.md
new file mode 100644
index 00000000..e09bcdbf
--- /dev/null
+++ b/docs/eCookbook/demo-programs/informe-os-dados.md
@@ -0,0 +1,51 @@
+
+It's sometimes useful to exlore what it would take to duplicate a GUI written in tkinter, especially when a nicely written article accompanies the code.
+
+This GUI code duplicates a portion of the tkinter code posted on this page:
+https://www.devmedia.com.br/tkinter-interfaces-graficas-em-python/33956
+
+It performs performs the logic for only the "Inserir" button.
+
+To add the code for the remaining buttons, add `elif` statements onto the bottom of the `if` statement in the event loop. At the moment, buttons that are not handled in the event loop causes a "Not yet implemlented" message to be shown.
+
+On a Windows machine, the window this code produces looks like this:
+
+
+
+
+PySimpleGUI is a package that provides an interface to GUI Frameworks that uses constructs familiar to Python programmers of all experience levels. With PySimpleGUI you can run your source code on tkinter, Qt, WxPython and in a browser... on Windows, Mac and Linux
+
+
+
+
+One of the "neat tricks" that PySimpleGUI has is the ability to run on multiple GUI platforms with a minimal amount of changes to your code. Often it is just 1 line of code to change.
+
+You can't do this on Trinket, in your browser because Trinket only supports tkinter.
+
+For the example code above, running on a Windows machine, the import statement at the top was changed to use a version of PySimpleGUI that runs on Qt, WxPython and in the browser (using Remi). Note that the windows produced are not perfect and may need a font size or other change to make it look better, but the several character change using PySimpleGUI is tiny compared to what it would take to port tkinter code to Qt.
+
+Changed the import to run on PySide2 (Qt)
+```python
+import PySimpleGUIQt as sg
+```
+
+The code then created this window running on Qt
+
+
+
+Changed the import to run on WxPython
+```python
+import PySimpleGUIWx as sg
+```
+
+The code then created this window running on WxPython
+
+
+Changed the import to run in a browser:
+```python
+import PySimpleGUIWeb as sg
+```
+
+The code then created this window running in a chrome window
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/intro-to-this-page.md b/docs/eCookbook/demo-programs/intro-to-this-page.md
new file mode 100644
index 00000000..cba024f6
--- /dev/null
+++ b/docs/eCookbook/demo-programs/intro-to-this-page.md
@@ -0,0 +1,65 @@
+
+# Welcome to the PySimpleGUI Interactive eCookbook
+
+SOME of these Trinkets are older, but all work.
+
+Use the navigation bar on the left to look through the pages. Each page has ***at least*** one demo program for you to RUN in your browser.
+
+With this eCookbook you don't need to do anything than **click run**. That's it. You can see the code that's running, modify it, and if you find it particulrly useful, copy it to your machine and use it in your project.
+
+## Example - The Basic PySimpleGUI Program
+
+Let's start with the most basic of PySimpleGUI programs so you know how they work.
+
+The code is on the left. Clicking run will show the GUI on the right side. The print output (stdout, stderr) are down in a window below the GUI. There are more controls, but that's enough to get you running. So, go ahead, **click RUN!**
+
+
+
+
+
+## The Regular (other) Cookbook
+
+You'll find the full PySimpleGUI Cookbook where it's always been located, on ReadTheDocs as a tab in the user documentation.
+
+http://Cookbook.PySimpleGUI.org
+
+## The Demo Programs
+
+There are over 300 .py .pyw files on the PySimpleGUI Repo that you can consider to be Cookbook Recipes. They show you how PySimpleGUI works and how to integrate PySimpleGUI with other packages. Ready to run bookbook recipes that are simple enough and commented enough that you don't need text.
+
+http://Demos.PySimpleGUI.org
+
+## The Full Documenation
+
+The Cookbook, primary doc, readme, call reference, etc, can always be found here:
+
+http://www.PySimpleGUI.org
+
+
+## Known (slight) Problems
+
+### Missing Titlebars
+
+Special code was added to PySimpleGUI to use a custom Titlebar when the program is running on Trinket. Not all Trinkets have this code added to them.
+
+You will notice with older versions of PySimpleGUI and Trinket that there is no titlebar on the window. That is because the titlebar is provided by the Operating System and Trinket doesn't really have one and thus the need for PySimpleGUI's custom code.
+
+### Smaller Screen Real Estate
+
+800 x 600 is the size of a standard Trinket screen that PySimpleGUI has to work with.
+
+That's quite small when you're trying to run Demo Programs from the PySimpleGUI project. Some won't fit. Most will though.
+
+You may need to use the full-screen mode for some examples. Information about full-screen is on this page in one of the first examples.
+
+## Consider Supporting Trinket
+
+Trinket is a **fantastic** platform for teaching PySimpleGUI. It's easy for students to use. It's easy for teachers to use. It doesn't require anyone to install anything anywhere. All that's needed is a browser. Coding from a tablet is difficult unless you have a keyboard, that's true for every coding site on the internet.
+
+I consider Trinket to be a partner. They've provided solid service to the PySimpleGUI community for several years. "It just works" is one of the most valuable traits for a product or service and PySimpleGUI "just works" on Trinket. Make a new PyGrame Trinket project, type `import PySimpleGUI as sg`, and you're ready to start having fun!
+
+The prices are riduculously low what we're all getting to experience - PySimpleGUI running in the browser with zero effort on your part.
+
+## Get on with learning!
+
+Start clicking topics on the left table of contents and have fun while learning PySimpleGUI.....
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/menu-bar.md b/docs/eCookbook/demo-programs/menu-bar.md
new file mode 100644
index 00000000..deec57ac
--- /dev/null
+++ b/docs/eCookbook/demo-programs/menu-bar.md
@@ -0,0 +1,15 @@
+```python.run
+runnable code goes here
+```## Collapsible Sections
+
+Visible / Invisible settings on the plain tkinter based PySimpleGUI have been a real challenge. In release 4.28.0 a new function, `pin`, was added that will "pin" an element to a location in your layout. This will reserve the location for the element in the layout. Without it, the element will move when you make it inivisible and visible again.
+
+There is a 1-pixel "penalty" of sorts when using this capability. A single pixel is needed to reserve and hold this spot, a small price to pay given what you can do with this new capability.
+
+This demo shows how you can use this feature to make Column elements invisible as if a section of the window has been collapsed with the contents hidden.
+
+Here is how the demo looks running on Windows
+
+
+
+
diff --git a/docs/eCookbook/demo-programs/menus.md b/docs/eCookbook/demo-programs/menus.md
new file mode 100644
index 00000000..af1a1558
--- /dev/null
+++ b/docs/eCookbook/demo-programs/menus.md
@@ -0,0 +1,24 @@
+## Menubar and Titlebar With Trinkets
+
+## Menus - MenubarCustom instead of Menu
+
+There's a tricky issue with Trinket. Trinket doesn't supply a titlebar by default. You may notice that many of the older examples here lack a titlebar. That's because it's only been in 2021 that a custom titlebar was developed and automatically added when the runtime enironment is Trinket.
+
+There's one issue with these Custom Titlebars.... you need a custom Menubar to go with them. -sigh-
+
+You'll find MenubarCustom is an element that works much like a normal Menu element.
+
+## Info from original Trinket made in 2019, but code updated in 2021:
+
+This demo shows you how you can add a menu bar to your program.
+You will receive events that are the menu item's text or the menu
+item's key.
+
+The main purpose of this demo is to teach you the layout of a menu definition.
+It is a basic Python list with listings inside that respresent the cascading
+of menus. You can go as deep as you with.
+
+Notice that the `ButtonMenu` Element is a little different. The MenuBar and right click menus both return the menu item chosen as the event. For the `ButtonMenu` Element the key of the button is returned. The menu item chosen is in the values variable. It's a 2-step process to get the menu item chosen for `ButtonMenu` elements.
+
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/multi-threaded-work.md b/docs/eCookbook/demo-programs/multi-threaded-work.md
new file mode 100644
index 00000000..f3ae9698
--- /dev/null
+++ b/docs/eCookbook/demo-programs/multi-threaded-work.md
@@ -0,0 +1,29 @@
+**Multi-Threaded Work - Running long tasks inside of a GUI**
+
+This program demonstrates one way of using a combination of Python's Thread
+and Queue objects to implement a GUI that performs work that takes too long
+to directly perform inside of the event loop.
+
+An example use would be if you have a button that you want to use to start
+some code that will take several seconds to run, then this technique is a
+good pattern to use.
+
+Take a moment to examine the code dealing with the Thread and the Queue. These
+constructs are nothing to fear as the amount of code that uses them is only a
+handul of lines of code are needed. And they are simple enough that you'll
+be able to understand them.
+
+***"Thread-safe"*** - This is an important term to consider any time you are using threads in your program. There are 2 things to check out:
+1. You must make sure that the calls you make from your thread are OK to call from a thread
+2. If you are running multiple threads, then the calls you make must be "thread-safe"
+
+The authors of libraries you are using often tell you if their code is "thread-safe".
+
+PySimpleGUI code is not thread safe. For the tkinter version (i.e. plain PySimpleGUI versus PySimpleGUIQt), you cannot run PySimpleGUI as a thread. To put that in simpler terms, you cannot make any calls into the PySimpleGUI package from a thread. For example, you cannot call `update` for any of your elements from a thread. This is why you see the updates happening from the main thread only.
+
+Screenshot:
+
+
+
+
+
diff --git a/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md b/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
new file mode 100644
index 00000000..5806a5ee
--- /dev/null
+++ b/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
@@ -0,0 +1,22 @@
+# Demo Programs
+
+The [Demo Progams](http://Demos.PySimpleGUI.org) were the basis for many of the Trinkets you see on this page. There are over 300 of them to help give you a fast jump start on building your application, or they will teach you how to perform various operations.
+
+If you want to learn how an element works, see example code, then check out the Demo Programs.
+
+In 2022 a new PySimpleGUI application, `psgdemos`, was released to [PyPI](https://pypi.org/project/psgdemos/). All you need to do is:
+
+`python -m pip install psgdemos`
+`psgdemos`
+
+(Use `python3` if you're on Linux or Mac)
+
+The command `psgdemos` will launch the Demo Browser, your gateway to Demo Program fun. The Demo Browser enables you to easily **search**, **run**, and **edit** the programs.
+
+For example, if you want to learn more about using the `Graph` element, then use the Demo Browser to search for Demo Programs that use that element:
+
+
+
+You can learn more about the Demo Browser and installing Demo Programs in the Cookbook, in the [Recipe on Demo Browser](https://pysimplegui.readthedocs.io/en/latest/cookbook/#recipe-the-demo-browser)
+
+It's by far the easiest way to navigate the many examples available for you use.
diff --git a/docs/eCookbook/demo-programs/settings-file.md b/docs/eCookbook/demo-programs/settings-file.md
new file mode 100644
index 00000000..034eb028
--- /dev/null
+++ b/docs/eCookbook/demo-programs/settings-file.md
@@ -0,0 +1,22 @@
+### Settings File - Load & Save Programming Settings
+
+This demo program shows one way to save your program's settings using a JSON file as your settings file. This code is particularly handy when you are building desktop-widgets like a Rainmater type of desktop widget.
+
+The main program in the example is very small. The focus is on the settings window.
+
+
+
+This is the settings window.
+
+
+
+Now you can easily add settings to your programs that are saved to disk, a very nice touch that adds a lot of polish to your programs.
+
+
+
+### Config.ini format
+
+In version 4.49.0.10 support for .INI format files was added. This is a quick example of how to use INI files with PySimpleGUI's User Settings APIs
+
+
+
diff --git a/docs/eCookbook/demo-programs/simple-form.md b/docs/eCookbook/demo-programs/simple-form.md
new file mode 100644
index 00000000..43ed2721
--- /dev/null
+++ b/docs/eCookbook/demo-programs/simple-form.md
@@ -0,0 +1,12 @@
+Menu Bar
+
+There are 4 places you'll run into menus in PySimpleGUI
+1. Menu Bar
+2. Right Click Menu
+3. Button Menu
+4. System Tray
+
+This demo showns how the Menu Bar element works and the format for the Menu Bar menus.
+
+
+
diff --git a/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md b/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
new file mode 100644
index 00000000..f2a1b4cb
--- /dev/null
+++ b/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
@@ -0,0 +1,49 @@
+**Basic PySimpleGUI Program**
+
+* The basic PySimpleGUI 3 part program structure
+* Enlarging windows on Trinket
+* Running PySimpleGUI on the repl.it site
+
+------
+
+The basic PySimpleGUI program, in 3 parts.
+
+Almost all PySimpleGUI programs have this architecture.
+
+First you define the window.
+Then create the window.
+Finally you collect inputs and operate on 'events'
+
+This is a good one to copy as a template
+
+
+
+-----
+
+**Enlarging windows on Trinket**
+
+Sometimes when you're running these Trinket examples, the window is so small that it's difficult to make out the text. To view the examples in much larger sizes, choose "Fullscreen" from the menu.
+
+
+
+
+This will make your window go from this:
+
+
+
+to this:
+
+
+
+
+
+----
+
+**Running code on repl.it**
+
+In addition to being able to run PySimpleGUI code online here on Trinket, you can also run PySimpleGUI on repl.it. The advantage to running on repl.it is that you have the ability to pip install nearly anything. Trinket severly limits what you can install and in fact with each of these examples the entire PySimpleGUI source code is being included. On repl.it the PySimpleGUI package is installed automatically for you.
+
+Trinket seems to block embedding iframes to other sites. This link will display the above program on repl.it.
+
+https://repl.it/@PySimpleGUI/Basic-PySimpleGUI-Template
+
diff --git a/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md b/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
new file mode 100644
index 00000000..7f3e1753
--- /dev/null
+++ b/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
@@ -0,0 +1,12 @@
+All credit for this code, the video and hard work belongs to Israel Dryer. His GitHub repository is located here: https://github.com/israel-dryer
+
+This calculator was developed as part of a YouTube tutorial. You can watch the video that describes how to make this calculator here:
+
+https://youtu.be/x5LSTDdffFk
+
+The GitHub location for the source can be found here:
+
+https://github.com/israel-dryer/PyDataMath-II
+
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md b/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
new file mode 100644
index 00000000..cc48024b
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
@@ -0,0 +1,21 @@
+1-4-24 Dice Game (incomplete)
+
+This is an exercise in duplicating a user interface written for Appjar. Duplicating another GUI has been a great way to compare and contract PySimpleGUI with other GUI packages. Something is always learned.
+
+It's based on the program posted on Reddit:
+
+https://www.reddit.com/r/learnpython/comments/ecykvx/more_help_with_1424/
+
+This program is incomplete. I'm unsure of the rules of the game, so the game mechanics are there but it's incomplete as the scoring isn't right yet.
+
+Based on this program
+
+
+
+On Windows the program below produces this window (change size of score to 14 for windows)
+
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md b/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
new file mode 100644
index 00000000..3798b65e
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
@@ -0,0 +1,15 @@
+**Popup Window with Delayed Text Output**
+
+The idea here is to present text on a character by character basis... as if someone was typing it on a keyboard or "saying" something in a text based adventure game.
+
+This Reddit mockup is based on this post:
+https://www.reddit.com/r/Python/comments/ed6pok/do_you_prefer_tkinter_or_pygame_for_your/
+
+The user can interrupt the message causing the window to close immediate, or they can wait for the entire message to be displayed and then close the window. An option could be added that would cause the full text to be displayed on the first button click and then the second click will close the window.
+
+On Windows this is how the window appears:
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/calculator.md b/docs/eCookbook/examples-for-reddit-posts/calculator.md
new file mode 100644
index 00000000..555d7c95
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/calculator.md
@@ -0,0 +1,24 @@
+**The Classic Simple Calculator **
+
+This program is the beginning of a typical calculator. It was done to see what creating one in PySimpleGUI versus tkinter looked like.
+
+A full-blown calculator was not completed. This was an exercise meant to duplicate the look and operation of the GUI, not the entire program. The things that are operational are:
+
+* Numeric entry via buttons
+* Numeric entry via keyboard
+* Clear display using CE button
+
+All of the other buttons are generating events, the logic hasn't been added to do somethiuung with the button click.
+
+The goal was to duplicate this GUI
+
+
+
+On windows the PySimpleGUI code produced this program
+
+
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md b/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
new file mode 100644
index 00000000..07dd3d9b
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
@@ -0,0 +1,9 @@
+A demo program to address this Reddit post:
+https://www.reddit.com/r/learnpython/comments/fdx0io/moving_a_slider_with_a_button_click/
+
+The idea is for a slider to be updated to the value input by the user in the input box.
+
+You can click the "Submit" button or press the enter key to complete the input.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md b/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
new file mode 100644
index 00000000..f5f2964a
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
@@ -0,0 +1,8 @@
+A handy demo pattern for you to follow should you want a user interface with a list of files along the left hand edge and something done with those files on the right side of the window.
+
+This is a highly "responsive" PySimpleGUI layout in that it will immediately take action when the user interacts with the window. You do not need to click a button to indicate a choice was made. You can also paste the folder path into the input box and the listbox will immediately populare with the correct folder's contents.
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md b/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
new file mode 100644
index 00000000..c6905b91
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
@@ -0,0 +1,19 @@
+**Coin Calculator **
+
+
+
+This is an example of a program originally written for tkinter. The length is roughly 1/2 the original program. However, it's the readability of the lines that is the more important difference.
+
+Note - need to add formatting of the text being output so that it's closer to looking like dollars and cents. This can be done by modifying these 4 lines of code:
+```python
+ window['Quarters_total'].update(quarters)
+ window['Dimes_total'].update(dimes)
+ window['Nickels_total'].update(nickels)
+ window['Pennies_total'].update(pennies)
+```
+
+Use f-strings insead of the variable names directly as paramters to `update`. It seemed better to keep the code simpler looking than add the formatting.
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md b/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
new file mode 100644
index 00000000..6093aa6a
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
@@ -0,0 +1,11 @@
+**Duplication of Reddit tinkter Tutorial on a Countdown Timer**
+
+This post seemed like an interesting one to demonstrate the use of "async" windows in PySimpleGUI. It was roughly 1/2 the size of the tkinter version.
+
+https://www.reddit.com/r/Python/comments/eh9461/countdown_gui_using_python_it_is_not_pretty/
+
+Here is how it looks on Windows...
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md b/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
new file mode 100644
index 00000000..4adbc947
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
@@ -0,0 +1,6 @@
+**Another Reddit Mockup**
+
+This time we're taking keyboard characters 1-9 and counting the number of times that character was pressed. There are labels going across the window with counters under them.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md b/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
new file mode 100644
index 00000000..1f195b6b
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
@@ -0,0 +1,12 @@
+Mockup of a car's dashoboard for Reddit
+
+NOTE - This program requires use of an unrelease PySimpleGUI.py that you can download from GitHub and place in your application's folder. This file is also included here as part of the Trinket itself. If you download the ZIP, you'll get both the application and the PySimpleGUI file.
+
+This was the hand drawn image provided as a mockup:
+
+
+And this is the window that the code produces:
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md b/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
new file mode 100644
index 00000000..10a2b451
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
@@ -0,0 +1,8 @@
+### Example of a "generated" layout based on a user's input
+
+In this case the poster wants a GUI that will ask for a different number of input fields depending on the value entered.
+
+I think this program does what's desired. First a number is obtained using a simple popup, then a full layout is made and finally the window is shown and available for interaction. Rather than it being a 1-shot window it's a fully functioning window should someone want to edit one of the addresses and re-calculate.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/fade-window.md b/docs/eCookbook/examples-for-reddit-posts/fade-window.md
new file mode 100644
index 00000000..c5e2be22
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/fade-window.md
@@ -0,0 +1,9 @@
+## Fading Window
+
+While it doesn't fade on Trinket, this window does fade away on Windows:
+
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md b/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
new file mode 100644
index 00000000..dbfcb98f
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
@@ -0,0 +1,8 @@
+A simple GUI with 2 inputs for this Reddit post:
+https://www.reddit.com/r/learnpython/comments/jq17m3/ive_finally_written_my_first_script_for_work_but/
+
+The window will be shown until a button is clicked or closed with an "X". This is called a "One Shot" window. Add an event loop if you want more user interaction.
+
+You can add more advanced features such as adding a popup call to get the date, or adding a Date Chooser button to choose the date. This will be easier for the user and will automatically do a bit of validation of the input.
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md b/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
new file mode 100644
index 00000000..7d2fed56
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
@@ -0,0 +1,15 @@
+## Quick Mock-up of a Tkinter GUI Posted on Reddit
+
+It's always a fun exercise to see what it takes to duplicate a GUI written using another framework. It's great practice and I learn something from the original author's work every time.
+
+This one was unique in that most tkinter GUIs are not as responsive. The text color for the checkboxes changes to either green or red immediately upon making a selection. It's a clever touch that I don't recall seeing in another tkinter GUI. Kudo's to the original author.
+
+There is an extra line of code required to set the icon because this example is running on Trinket.
+
+All credit for this GUI's design goes to Github User saikatsahana77
+
+You'll find his original project here:
+https://github.com/saikatsahana77/ipynb_to_py_converter
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md b/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
new file mode 100644
index 00000000..542cbfb2
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
@@ -0,0 +1,20 @@
+**Example Program for Reddit**
+
+
+
+Sometimes little programs are written to demonstrate concepts for Reddit posts.
+These make good teaching tools so you'll find a few have made it onto the list.
+
+This program demonstrates simple input from and output to a window. Additionally
+a couple of parameters are used to "complete" the interface so that it's nice
+for the user. Think for a moment about how people will use your GUI... take a
+moment to design it. There were 2 options in this program that were nice
+finishing touches.
+1. The return key signals the user has completed input
+2. After the output is displayed, the input field is cleared for the next entry
+
+This program also uses the `change_look_and_feel` call to quickly add some color
+to the window.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/login.md b/docs/eCookbook/examples-for-reddit-posts/login.md
new file mode 100644
index 00000000..8b76f81f
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/login.md
@@ -0,0 +1,7 @@
+## Simple Login
+
+Prompts for a User Name and a Password. The password is protected from view while being typed in.
+
+You can use the Return key or the login button to submit your entered information.
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md b/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
new file mode 100644
index 00000000..4ebc43a2
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
@@ -0,0 +1,18 @@
+A Mockup Of Another Reddit Project
+
+This is an ideal project for PySimpleGUI. OK, so maybe it's claimed for just about every GUI problem, but only when it fits. And for this project, it fits.
+
+The Redit post where this project was mentioned:
+
+https://www.reddit.com/r/Python/comments/ee6n53/advice_on_code_before_i_make_it_bigger/
+
+And here's the project's GitHub:
+
+https://github.com/wigglememore/Machinerys-Hanbook-in-Code
+
+What made this project especially appealing to add a GUI onto is the fact that it was written in a well-structured manner. All of the input was isolated in a single file. It was easy to go from that file to a GUI.
+
+At the end of the function the values dictionry is returned.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md b/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
new file mode 100644
index 00000000..009a8c3f
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
@@ -0,0 +1,21 @@
+A Maze Solution Finding Algorithm
+
+This program was initialy posted to Reddit as a command line application that produced a folder full of PNG files representing the maze solution. It was only after you concatenated these images together to create a flip-book style movie that you got an appreciation of the graphics.
+
+Rather than outputting these PNG files to a folder, how about outputting them to a GUI window?
+
+That's where the idea of adding on a GUI came to be. An hour later and this was the result.
+
+You are first asked to choose the TXT file representing the maze.
+
+Then you'll be shown the maze and an animation of it being solved.
+
+You can view this program without the source code here:
+
+https://pysimplegui.trinket.io/sites/maze
+
+Here is how it looks running on windows:
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md b/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
new file mode 100644
index 00000000..21eff79a
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
@@ -0,0 +1,15 @@
+Here's a little demo program in response to this help request on Reddit:
+
+https://www.reddit.com/r/learnprogramming/comments/h884vg/is_there_any_easy_gui_maker_for_python/
+
+The idea is to get an initial value in an input box, then get 3 more values in the same box.
+
+In this implementation you can press the "Enter" button or the return key to enter a value.
+
+The result is put into a single list that is shown at the end.
+
+On Windows it looks like this:
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md b/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
new file mode 100644
index 00000000..d2a89895
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
@@ -0,0 +1,13 @@
+## Navigating Focus Using Arrow Keys
+
+This example shows how you can navigate through your windows's elements by using the left and right arrow keys. The down arrow key is set to exit the program.
+
+The code that sets up the use of arrow keys are these 3 bind statements. They cause events to be generated when those keys are pressed on the keyboard:
+```python
+window.bind('', '-NEXT-')
+window.bind('', '-PREV-')
+window.bind('', 'Exit')
+```
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/password-entry.md b/docs/eCookbook/examples-for-reddit-posts/password-entry.md
new file mode 100644
index 00000000..0e7f2f7c
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/password-entry.md
@@ -0,0 +1,6 @@
+GUI for checking for a correct password using a hash code.
+
+If you enter "gui" as the password, then you'll get another window that enables you to create a hashcode based on your own string.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md b/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
new file mode 100644
index 00000000..ed119ec1
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
@@ -0,0 +1,21 @@
+A super-quick mockup of a replacement GUI that was originally written in tkinter.
+
+It's meant to run on a Raspberry Pi but has the GPIO stuff not present at the moment. It's only the GUI.
+
+It would be best to completely separate the hardware / GPIO code into functions. This will allow the GUI to be run and tested on platforms other than the Pi that don't support GPIO. For those platforms the functions that do GPIO can simply return.
+
+
+
+The original tkinter code can be found here:
+
+https://www.reddit.com/r/learnpython/comments/e2qcdz/pid_interface_keeps_crashing/
+
+When run on Windows the code produces this GUI
+
+
+
+Running on the Pi it looks nearly identical
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md b/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
new file mode 100644
index 00000000..e8ad83ab
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
@@ -0,0 +1,8 @@
+##PNG Image Viewer
+
+Super-simple image viewer.
+
+Click on the image to move to the next image.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md b/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
new file mode 100644
index 00000000..d9cae57c
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
@@ -0,0 +1,18 @@
+"Printing" to a GUI window
+
+Demonstration of displaying your program's text information in a variety of ways.
+
+
+
+There are a number of ways to display text information using PySimpleGUI. A few include:
+
+1. Use the "Debug Window" by calling sg.Print
+2. Call a `popup` where the parms passed in will be shown in a new window
+3. Create your window with an Output Element in it
+4. Change the value of a `Text` Element by calling its `update` method
+5. Change the value of a `Multiline` Element by calling its `update` method
+
+This code demonstrates several of these ways. You'll see 2 windows displayed. One is the Debug Window, the other is your custom window with output and text elements.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md b/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
new file mode 100644
index 00000000..10c0eb24
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
@@ -0,0 +1,8 @@
+A Simple Input 2 Files Frontend
+
+As specified by Reddit post:
+
+https://www.reddit.com/r/learnprogramming/comments/egql7t/help_understanding_guis/
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md b/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
new file mode 100644
index 00000000..99d71f4e
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
@@ -0,0 +1,4 @@
+Demo of using a list comprehension to generate a multi-row layout
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md b/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
new file mode 100644
index 00000000..0108eecd
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
@@ -0,0 +1,21 @@
+Reddit Scraper - Status Update Front-End
+
+If you want to see a fully functional Reddit search program that uses the Reddit PRAW APIs, then check out the [Reddit Search Demo Program](https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Reddit_Search.py) found on the PySimpleGUI GitHub.
+
+Waits for a Start button then simulates reading from Reddit and updating text in the window with the current posts's title.
+
+You can choose the subs you want to read using the listbox and then click "Start Scrape" to loop through reading the subs.
+
+If an "Abort" is desired, then a call to `window.read()` could be added and checked inside the download loop. For now it's a simple get the list of subs and read each, displaying the information as it's read.
+
+A progress meter runs along the bottom and varies depending on the number of entries in the sub.
+
+Looks like this on Windows:
+
+
+
+In response to Reddit post:
+
+https://www.reddit.com/r/learnpython/comments/efw4c8/help_updating_tiles_on_tkinter_gui/
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md b/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
new file mode 100644
index 00000000..818fe135
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
@@ -0,0 +1,12 @@
+An example solution to this Reddit post:
+
+https://www.reddit.com/r/learnpython/comments/jgmvl7/this_is_probably_a_stupid_question/
+
+The problem is a basic sales calculator. This particular example is quite primitive. It simply takes a single input, does a simple calculation and outputs a total.
+
+The window produced on Windows looks like this:
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md b/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
new file mode 100644
index 00000000..07f017e9
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
@@ -0,0 +1,23 @@
+Another "Quick Mockup" (under an hour) of a GUI requested on Reddit
+
+The GUI design was provided in this post.
+
+https://www.reddit.com/r/Python/comments/eilntg/should_i_create_gui_on_tkinter/
+
+This was the design provided
+
+
+
+Here is what the PySimpleGUI mockup looks like running on Windows.
+
+
+
+The code has a couple of places where padding needs adjusting when running on a real machine versus Trinket. It's a quick mockup and can certainly be improved from this prototype. It's meant to show what's possible.
+
+
+The "Published" (without showing the code) version is here:
+
+https://pysimplegui.trinket.io/sites/reddit-mockup-shopify
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md b/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
new file mode 100644
index 00000000..33c362bd
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
@@ -0,0 +1,16 @@
+Quick mock-up of a window spotted on Twitter.
+It's a fun challenge to see how difficult it is to duplicate tkinter based programs.
+
+I don't know the number of lines of code for this source window:
+
+
+
+
+The PySimpleGUI version required 11 lines of code to duplicate it.
+
+
+
+Here is the source code for the above window:
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md b/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
new file mode 100644
index 00000000..3922334f
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
@@ -0,0 +1,6 @@
+Super-Simple Periodic Update Demo
+
+This one is a window that runs every second and updates some text in the window to reflect the values of 10 random numbers. Modify to add whatever kinds of Elements you want (like Tables, or rows of text). Just drop the changes into the event loop
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/text-adventure.md b/docs/eCookbook/examples-for-reddit-posts/text-adventure.md
new file mode 100644
index 00000000..d1ceaf97
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/text-adventure.md
@@ -0,0 +1,16 @@
+A Text Adventure GUI Mockup
+
+A quick mockup for a GUI in response to this Reddit post:
+
+https://www.reddit.com/r/learnpython/comments/dza038/is_there_a_way_to_request_and_save_user_input/
+
+This program creates a window that takes in user input and displays "results" in the window. The results are displayed using simple "print" statements.
+
+On Windows, the window look like this:
+
+
+
+Note that colored text output to an `Output Element` is not currently supported. You can have colored text in the main window itself but not in these scrolling type Elements. However, that was a very recent change to PySimpleGUIQt that DOES allow colored text to be sent to a scrolling output Element (the Multiline). Looking at adding it to the tkinter (plain PySimpleGUI) port very soon.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md b/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
new file mode 100644
index 00000000..8d562100
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
@@ -0,0 +1,37 @@
+## Tic Tac Toe
+
+In response to Reddit post:
+https://www.reddit.com/r/learnpython/comments/iq4wfs/question_how_do_you_manage_events_lots_of_events/
+
+The basic question is how to handle events coming from a large number of sources, or a large number of buttons in this case.
+
+The answer is to use the information about the button along with a datastructure to record some information about it. In this case, for Tic Tac Toe, the "Game Board" is where you want to record information. You want to know if a spot is taken and if so, by who.
+
+One simple way to do this is via a dictionary. Record each spot that's been played in a dictionary. The "key" will be the board location and the value will be which player played a piece there.
+
+Because keys can be "anything" in PySimpleGUI (the exception is they cannot be lists), a tuple would be a good choice. This gives you a (row, col) description of the piece and fits well visually too. You can use the row, col in a loop to create the board. Because list comprehensions can be used to create layouts, then it works out well to use row, col as the key.
+
+This is how the window looks runnins on Windows:
+
+
+
+
+The main board is created with this single line of code:
+
+```python
+[[sg.Button(size=(3,1), key=(row,col)) for col in range(3)] for row in range(3)]
+```
+
+Because lists can be combined, it's possible to "build" a layout up from pieces. In this case, there are 3 sections to the board. There's a Text header at the top, then the board, then a couple of buttons on the bottom. This layout can be built with 3 lines of code. There's the initial Text Element at the top that starts the layout. Then the board is added on and finally the buttons. The layout creation is thus:
+
+```python
+layout = [[sg.Text('X Starts First')]]
+layout += [[sg.Button(size=(3,1), key=(row,col)) for col in range(3)] for row in range(3)]
+layout += [[sg.Button('Reset'), sg.Button('Cancel')]]
+```
+
+The rest of the code is pretty self-explanatory. It involves using a dictionary to store the locations that have been played and which player played that location.
+
+Because the board is small, you'll want to click the upper left corner of the code display and choose the Display Full Screen option.
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md b/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
new file mode 100644
index 00000000..f392422b
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
@@ -0,0 +1,22 @@
+Ticket Reservation Example
+
+This program duplicates the window that this tutorial creates.
+
+https://www.reddit.com/r/Python/comments/dk3rff/python_gui_project_ticket_reservation_style_and/
+
+When using tkinter 41 lines of code are used. This PySimpleGUI program uses 19
+That makes the PSG program roughly 43% the size of the tkinter program, which is within the estimates of 1/2 to 1/10.
+
+Because this is a "data entry" type window, care was taken to clear the fields after the record was submitted and the cursor (focus) was placed back up at the name field, ready for a new record to be added.
+
+This is a screenshot of the tkinter version
+
+
+
+And this is what the PySimpleGUI window produces
+
+
+
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
new file mode 100644
index 00000000..13ac5e3c
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
@@ -0,0 +1,24 @@
+**Visual Basic Program Duplication**
+
+The exercise here is to duplicate a program originally written in Visual Basic.
+
+This is the provided screenshot
+
+
+
+The first thing to do with all PySimpleGUI programs is to define what your "rows" will look like. In this case it appears as if 3 rows are present.
+
+The bottom row is a series of "container elements" including Frame Elements and a Column Element
+
+
+
+
+
+Here is the start of the code needed to implement this particular layout.
+
+Information about the program's operations are displayed in the middle of the window. It's assumed that will be perhaps a table in the future, but for now it is a handy location to route printed output to the window.
+
+Clicking the "Process Files" buttons will print out the values of the `values` variable which is the values dictionary returned from the call to `window.read()` as can be seen in the code.
+
+
+
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
new file mode 100644
index 00000000..5d6f4210
--- /dev/null
+++ b/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
@@ -0,0 +1,16 @@
+This page shows how PySimpleGUI can be used to duplicate (or nearly duplicate) Visual Basic interfaces with ease.
+
+This is the target program to duplicate
+
+
+
+This short PySimpleGUI program is under 40 lines of code and implements the first row of controls. On Windows, the special characters (arrows) show up correctly. On Trinket they do not and will in fact give you an error if you click on one of these buttons.
+
+This is how the program looks when run on Windows
+
+
+
+VERY little time was spent creatring and even less time spent polishing it. Stuff doesn't line up perfectly, etc. Like any GUI, time needs to be spent making these kinds of fine adjustments. The point here was to show something representative quickly.
+
+
+
diff --git a/docs/eCookbook/games/battleship.md b/docs/eCookbook/games/battleship.md
new file mode 100644
index 00000000..a86eabaf
--- /dev/null
+++ b/docs/eCookbook/games/battleship.md
@@ -0,0 +1,34 @@
+**A GUI front-end for a Battleship or Minesweeper game**
+
+This is not a complete game but rather a GUI that's ready for you to add your game logic to it.
+
+There are 3 versions of this code, each with different levels of use of list comprehensions.
+
+This window is a grid of buttons with each key being the row and column of the button.
+
+It takes in clicks and will randomly change the button color and text that was clicked to either an "M" for Missing or "H" for hit.
+
+The idea here is to drop in the code for the hit/miss logic and call this code when a button is clicked.
+
+The `layout` definition is unusual in this example compared to other PySimpleGUI programs. Normally the layout is done all at one time, in a single statement `layout = [[.....]]`. This code uses a "contactenated layout" because the buttons are created using a list comprehension.
+
+Note that these programs are using the new expanded Look and Feel Themes released in version 4.6 of PySimpleGUI.
+
+Screenshot from Windows:
+
+
+
+**Implementation 1 - List Comprehension for Board**
+
+
+
+**Implementation 2 - List Comprehension for Board Rows**
+
+
+
+
+
+**Implementation 3 - No List Comprehension**
+
+
+
diff --git a/docs/eCookbook/games/conways-game-of-life.md b/docs/eCookbook/games/conways-game-of-life.md
new file mode 100644
index 00000000..e123617b
--- /dev/null
+++ b/docs/eCookbook/games/conways-game-of-life.md
@@ -0,0 +1,14 @@
+**Conway's Game Of Life**
+
+This demo is an adaptation of a text based Game of Life. The PySimpleGUI code was added to an existing engine. The GUI code is pretty well isolated, especially the board creation / setup code which is in a couple of class methods.
+
+It demonstrates utilizing a `Graph` element to draw rectanges based on user mouse clicks. This kind of interface works well on both a traditional window + mouse setup or on a tablet's touchscreen.
+
+This same code can be run on Android for example using PyDroid3.
+
+The "Published" version of this code can be found here:
+https://pysimplegui.trinket.io/sites/conways-game-of-life
+
+It's the same output but done in a full-window, without the code being shown.
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/games/dice-roller.md b/docs/eCookbook/games/dice-roller.md
new file mode 100644
index 00000000..f491d972
--- /dev/null
+++ b/docs/eCookbook/games/dice-roller.md
@@ -0,0 +1,16 @@
+## Dice Roller
+
+A classic beginner problem to solve.... simulate rolling some dice.
+
+This little program allows you to choose the numer of sides on the dice and the number of dice to roll.
+
+There's nothing really tricky about this program. The rolling and display of the results has been compressed down to a single line of code:
+```python
+ window['-ROLLED-'].update(' '.join([str(random.randint(0, int(values['-DICE-'])-1)+1) for i in range(int(values['-NUM DICE-']))]))
+
+```
+
+A list comprehension is used to generate the list of dice results, combined into a single string and then output in the window.
+
+
+
diff --git a/docs/eCookbook/games/minesweeper.md b/docs/eCookbook/games/minesweeper.md
new file mode 100644
index 00000000..87b453e1
--- /dev/null
+++ b/docs/eCookbook/games/minesweeper.md
@@ -0,0 +1,33 @@
+The classic Minesweeper game!
+
+The user interface requirements for Minesweeper are a little unusual compared to most GUIs. The use of the right mouse click to mark squares with flags is the most difficult part to implement in PySimpleGUI because right clicks are not normally passed along to the user.
+
+The specific action needed is the ability to right click on a `Button` and receive an event. In version 4.11.0 of PySimpleGUI this capability was made easier with the addition of the `.bind` method for both Elements and Windows. It is what is used to "bind" the right mouse button click to a button.
+
+This implementation is based on a post made here:
+
+https://learnku.com/articles/37714
+
+There are 3 noteable changes:
+
+1. Button keys were made into tuples instead of strings
+2. Right mouse button clicks are received through `window.read()` calls instead of tkinter callbacks
+3. Graphic images were moved into the source code by using Base64 images
+
+The posted code was written prior to the `bind` method being available.
+
+Because Trinket's display size is so small, the board size is limited to a 10 x 8 board. Running on your local computer you'll want to change the display variables at the top to 24 x 14 and change the bombs from 10 to 80
+
+On Windows the game looks really nice thanks to the author paying attention to the details and choosing nice graphics and by matching colors
+
+
+
+To play this game in your browser using this Trinket, you'll probably want to play the "Published" version as it doesn't show the source code and provides a cleaner view of the application.
+
+Here's the published version's linke:
+
+https://pysimplegui.trinket.io/sites/minesweeper
+
+
+
+
diff --git a/docs/eCookbook/games/sudoku.md b/docs/eCookbook/games/sudoku.md
new file mode 100644
index 00000000..182bf4b1
--- /dev/null
+++ b/docs/eCookbook/games/sudoku.md
@@ -0,0 +1,44 @@
+## Sudoku In a Line
+
+This demo began as a demonstration of the many ways a Sudoku board could be created using PySimpleGUI. It ended up being more complete application. The "build-a-Sudoku-board" port of the code can be represented in a somewhat boring single line of code.
+
+```python
+sg.Window('Sudoku',[[sg.Frame('',[[sg.I(random.randint(1,9), justification='r', size=(3,1),key=(frow*3+row,fcol*3+col)) for col in range(3)] for row in range(3)]) for fcol in range(3)] for frow in range(3)]+ [[sg.B('Exit')]]).read()
+```
+
+This layout uses list comprehensions to create the classic Sudoku board that is 9 boxes each consisting of 9 numbers. The single line of code produces this window when run on Windows 10:
+
+
+
+The board isn't a "valid" one. It's filled with random digits.
+
+Building it out further required adding on a board generator and then a few fun features. The board generation was discovered by searching through GitHub. I finally settled on this elegantly simple implementaiton found in this GitHub Repository:
+
+https://github.com/MorvanZhou/sudoku
+
+A big thanks is thus owed to Morvan Zhou for creating these puzzles for our enjoyment.
+
+You begin the game with a board much like this one:
+
+
+
+You can check your progress at any point by clicking `Check`. This will color each cell depending on the status of the cell.
+
+* If the answer is correct, the background will be white (or whatever is normal for the theme you're using)
+* If the answer is incorrect, the background color will turn red
+* If the answer is blank, the background will turn yellow
+
+
+
+It makes it easy to see what you've won the game. There's also a popup that's displayed when you click `Check` and the board has been correctly solved. Click `Solve` and the answers are all filled in for you.
+
+
+
+If you wish to start a new game click `New Game`. The "Mask Rate" determines what percentage of the cells are erased at the beginning.
+
+If you wish to run this program using Trinket without the debugger, the "Published" version is here:
+
+https://pysimplegui.trinket.io/sites/sudoku
+
+
+
diff --git a/docs/eCookbook/games/uno-card-game.md b/docs/eCookbook/games/uno-card-game.md
new file mode 100644
index 00000000..f8cf59a8
--- /dev/null
+++ b/docs/eCookbook/games/uno-card-game.md
@@ -0,0 +1,12 @@
+**Uno Card Game**
+
+Demonstration of how to use a Graph Element to "draw images", in this case
+cards, so that they overlap.
+
+The low resolution on Trinket resulted in the top and bottom being cropped
+from view. You can see enough to play and get an understanding one way of
+using PySimpleGUI buttons and the graph element to create a card came.
+
+
+
+
diff --git a/docs/eCookbook/games/wordle.md b/docs/eCookbook/games/wordle.md
new file mode 100644
index 00000000..5996902c
--- /dev/null
+++ b/docs/eCookbook/games/wordle.md
@@ -0,0 +1,8 @@
+# Wordle
+
+A front-end for the popular Wordle game
+
+You will need to add some additional code to hook up to a dictionary of words. This Trinket has the code to handle all of the user input & output. It takes in characters, converts to upper case, handles backspace key and enter key. It also color codes the submitted answer against the "Current word" (currently a single constant).
+
+
+
diff --git a/docs/eCookbook/graph-element/animated-line-graph.md b/docs/eCookbook/graph-element/animated-line-graph.md
new file mode 100644
index 00000000..18dabbf7
--- /dev/null
+++ b/docs/eCookbook/graph-element/animated-line-graph.md
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/eCookbook/graph-element/dashboard-mockup.md b/docs/eCookbook/graph-element/dashboard-mockup.md
new file mode 100644
index 00000000..524e4919
--- /dev/null
+++ b/docs/eCookbook/graph-element/dashboard-mockup.md
@@ -0,0 +1,18 @@
+
+The beginnings of a Dashboard. Shows dummy data as a moving line graph, some Elements to gather input, a play and pause button.
+
+This demo uses a construct named "User Defined Elements". These are functions that return an element and thus the function call can be made from inside of a layout. In the layout there 3 elements on a row that look like this:
+
+`[ColumnParm('Model', 1, model_dict), ColumnParm('Parameter', 2, parm_dict),ColumnParm('Data Set', 3, data_set_dict), ],
+`
+
+`ColumnParm` returns a `Frame` Element that has a number of radio buttons inside.
+
+This link shows the program running on Trinket in "Published" mode:
+
+https://pysimplegui.trinket.io/sites/quick-and-dirty-dashboard-for-reddit
+
+
+And as usual here is the code:
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/graph-element/fourier-animated-graph.md b/docs/eCookbook/graph-element/fourier-animated-graph.md
new file mode 100644
index 00000000..ffe51965
--- /dev/null
+++ b/docs/eCookbook/graph-element/fourier-animated-graph.md
@@ -0,0 +1,16 @@
+### A Fourier Transform Graph
+
+
+
+This compact and impressive Fourier Transform demo program was submitted by an innovative PySimpleGUI user named Jason Yang (https://github.com/jason990420). He's created a number of other amazing PySimpleGUI programs such as the solitaire and minesweeper games. Not only did he write this impressive demonstration, but he also figured out how to create line drawings in a highly efficient manner that resulted in a new Graph Element drawing primitve.
+
+The underlying drawing primitive that makes it all possible is a new Graph Element method, `draw_lines`. If you want to run this code, you'll need to download the latesst version of PySimpleGUI from the PySimpleGUI GitHub (http://www.PySimpleGUI.com). The code will be released to PyPI soon as release 4.19.0. For nom you'll need to get it from GitHub as version 4.18.0.9.
+
+When run on a desktop PC, the update is much smoother.
+
+You can run the Trinket "published" version for a cleaner look here:
+
+https://pysimplegui.trinket.io/sites/fouriergraph
+
+
+
diff --git a/docs/eCookbook/graph-element/graph-element-bar-chart.md b/docs/eCookbook/graph-element/graph-element-bar-chart.md
new file mode 100644
index 00000000..fb24fecd
--- /dev/null
+++ b/docs/eCookbook/graph-element/graph-element-bar-chart.md
@@ -0,0 +1,51 @@
+## Graph Element - Bar Charts
+
+Sometimes using Matplotlib is overkill.
+
+Some graphing can be done trivially with PySimpleGUI. A **Bar Chart** in particular is *quite easy*.
+
+The reason bar charts are simple and easy to make can be found by breaking down a bar chart. A bar chart is literally a series of rectangles.
+
+## A 6-line Example
+
+Here's an example with the minmum number of lines of code I could write and still have it be readable.
+
+Each of the steps is 1 line of code except for the for-loop being 1 more
+1. Import PySimpleGUI
+2. Make the Window
+3. Loop through the data
+4. Draw a Bar
+5. Draw a label above it with the value of the data point
+6. Wait for window to be closed by user
+
+
+
+
+
+
+
+## Drawing X and Y Axis
+
+This example is a copy of a chart produced using Matplotlib.
+
+The chart data is contained in 3 lists.
+
+1. The X-Axis labels for each bar
+2. The color of each bar
+3. The Y-Value for each bar
+
+This example is rather specific as the number of data points was known ahead of time as was the maximum Y value. A minumum amount of code enables you to see each component of the graph.
+
+
+
+
+
+
+
+## Another Example
+
+This chart updates every time you click the button. The bar values are labeled as well with the label being at the top of each bar. This is just the starting point for you to jump from and modify.
+
+
+
+
diff --git a/docs/eCookbook/graph-element/graph-element-drag-a-square.md b/docs/eCookbook/graph-element/graph-element-drag-a-square.md
new file mode 100644
index 00000000..bcd84854
--- /dev/null
+++ b/docs/eCookbook/graph-element/graph-element-drag-a-square.md
@@ -0,0 +1,19 @@
+## Graph Element - Draw a square, drag it around
+
+This program is meant to show just how simple the Graph element can be to work with. The code has been trimmed down to a base minimum.
+
+The number of lines of code is 22 lines of actual program code, many of those are because of putting parameters on separate lines to make it easy for you to see them. It's 16 lines of code if you're counting "statements". The number isn't important. The simplicity is.
+
+Like many Demo Programs, this was written to demonstrate a bug that was happening. Testing new features or replicating bugs have been an excellent genesis for many of the Demo Programs.
+
+The high level summary of the code is:
+* Create the layout that is a single Graph Element of size 400 x 400 pixels
+* Make the window
+* Draw a square on the Graph Element
+* Event loop
+ * `window.read()`
+ * If the event is the Graph element's key, then it's a mouse click or drag event
+ * Move the center of the square to where the mouse is located
+
+
+
diff --git a/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md b/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
new file mode 100644
index 00000000..f7b30cef
--- /dev/null
+++ b/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
@@ -0,0 +1,15 @@
+Dragging Stuff Around
+
+This is where the Graph Element really begins to open up some powerful applications. In this short drawing we're creating a paint program where you can drag with your mouse to create shapes and move them around on the Graph surface.
+
+Also demonstrated are the cursors that can be set. When moving things, the dursor is changed into a movement cursor.
+
+To run the program without the code on the screen, use this link to get a much larger view:
+https://pysimplegui.trinket.io/sites/graph-drawing-and-dragging
+
+Here's what it looks like on Windows
+
+
+
+
+
diff --git a/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md b/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
new file mode 100644
index 00000000..a49382af
--- /dev/null
+++ b/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
@@ -0,0 +1,9 @@
+A line graph showing the values of the data points along the line.
+
+The original source to this program can be found in this repository:
+https://github.com/okajun35/practice_pySimpleGUI/tree/master/chart
+
+Thank you to the PySimpleGUI fans from "Start Python Club" for submitting.
+
+
+
diff --git a/docs/eCookbook/graph-element/graph-element-sine-wave.md b/docs/eCookbook/graph-element/graph-element-sine-wave.md
new file mode 100644
index 00000000..25978aaf
--- /dev/null
+++ b/docs/eCookbook/graph-element/graph-element-sine-wave.md
@@ -0,0 +1,8 @@
+Using the Graph Element to make a line graph complete with X & Y axis labelled
+
+On Windows the program looks like this:
+
+
+
+
+
diff --git a/docs/eCookbook/graph-element/utah-teapot.md b/docs/eCookbook/graph-element/utah-teapot.md
new file mode 100644
index 00000000..0d4d31eb
--- /dev/null
+++ b/docs/eCookbook/graph-element/utah-teapot.md
@@ -0,0 +1,18 @@
+## Utah Teapot - Using a `Graph` Element
+
+https://en.wikipedia.org/wiki/Utah_teapot
+
+To quote from the Wikipedia page:
+> The Utah teapot, or the Newell teapot, is a 3D test model that has become a
+> standard reference object and an in-joke within the computer graphics community.
+> "Using a teapot model is considered the 3D equivalent of a "Hello, World!" program"
+
+This PySimpleGUI program originated from GitHub user [EdwardChamberlain](https://github.com/EdwardChamberlain/) who has given permission for it to be used here in the PySimpleGUI eCookbook. Thank you Edward!!
+
+This is a link to the GitHub repo where you'll find the latest version of the project:
+[PySimpleGUI-3D-Viewer](https://github.com/EdwardChamberlain/PySimpleGUI-3D-Viewer)
+
+You can rotate the object using the top-most slider labelled "R" or you can use your mouse to rotate it by dragging your mouse (hold the left mouse button while dragging) in the Graph area.
+
+
+
diff --git a/docs/eCookbook/graph-element/visualizing-sorts.md b/docs/eCookbook/graph-element/visualizing-sorts.md
new file mode 100644
index 00000000..77d4a445
--- /dev/null
+++ b/docs/eCookbook/graph-element/visualizing-sorts.md
@@ -0,0 +1,11 @@
+This demonstration shows how to use PySimpleGUI's Graph Element's drawing primitives to create a simple animation.
+
+In this case a Bubble Sort and an Insert Sort are shown. Other sorting algorithms can be easily added. You can adjust the speed in realtime by using the slider.
+
+This is how it looks on Windows:
+
+
+
+Here on Trinket the animation may not be as smooth
+
+
diff --git a/docs/eCookbook/layouts/centered-and-simple.md b/docs/eCookbook/layouts/centered-and-simple.md
new file mode 100644
index 00000000..b73f8ff5
--- /dev/null
+++ b/docs/eCookbook/layouts/centered-and-simple.md
@@ -0,0 +1,14 @@
+## Simple Window with Elements Centered
+
+This little demo has several concepts that may be of help to you
+* The elements are all centered in the window
+* The graphics are base64 and contained in the .py file itself
+* It has an animation
+
+
+It looks like this running on Windows:
+
+
+
+
+
diff --git a/docs/eCookbook/layouts/collapsible-sections.md b/docs/eCookbook/layouts/collapsible-sections.md
new file mode 100644
index 00000000..7f2f8611
--- /dev/null
+++ b/docs/eCookbook/layouts/collapsible-sections.md
@@ -0,0 +1,13 @@
+## Collapsible Sections
+
+Visible / Invisible settings on the plain tkinter based PySimpleGUI have been a real challenge. In release 4.28.0 a new function, `pin`, was added that will "pin" an element to a location in your layout. This will reserve the location for the element in the layout. Without it, the element will move when you make it inivisible and visible again.
+
+There is a 1-pixel "penalty" of sorts when using this capability. A single pixel is needed to reserve and hold this spot, a small price to pay given what you can do with this new capability.
+
+This demo shows how you can use this feature to make Column elements invisible as if a section of the window has been collapsed with the contents hidden.
+
+Here is how the demo looks running on Windows
+
+
+
+
diff --git a/docs/eCookbook/layouts/fixed-size-columns-with-justification.md b/docs/eCookbook/layouts/fixed-size-columns-with-justification.md
new file mode 100644
index 00000000..3b5496e5
--- /dev/null
+++ b/docs/eCookbook/layouts/fixed-size-columns-with-justification.md
@@ -0,0 +1,27 @@
+## Fixed Size Columns - With `element_justification`
+
+Generally speaking, PySimpleGUI likes it when you don't force sizes of things to be a specific number of pixels. Instead, it's suggested that you make things "float", to size themselves.
+
+The `Column` element supports setting a specific size for the Column, however, the use of the paramter `element_justification` does not work on these fixed size Columns. Instead, another approach is needed.
+Two options are (there may be more of course):
+1. Use a `Frame` element
+2. Instead of `size` parameter, use a `Sizer` element
+
+### The Frame Solution
+
+The easiest approach is to use a `Frame` element instead of a `Column`. If using a `Frame` element, then setting a fixed size works with the `element_justification` parameter.
+
+In order to get the vertical alignment the easiest solution is to use the `VPush` element above and below the layout. This will "push" from the top and the bottom with the result being that the layout is centered vertically.
+
+
+
+
+
+### The Column Solution
+
+The way to get both a fixed size Column and have the interrior be able to be justified is to use a little-known "helper element" called `Sizer`. This element simply adds space in horizontal and veritcal directions. The implementation of it is that it's simply a Column with padding added.
+
+To help you use these, this demo was created. It makes a "User Defined Element" (a function that looks like an element and can be used in layouts) that acts like a Column that enables you to have both a size and an element_justification parameter.
+
+
+
diff --git a/docs/eCookbook/layouts/push-and-vpush-elements.md b/docs/eCookbook/layouts/push-and-vpush-elements.md
new file mode 100644
index 00000000..2b6e8f30
--- /dev/null
+++ b/docs/eCookbook/layouts/push-and-vpush-elements.md
@@ -0,0 +1,14 @@
+## `Push` and `VPush` Elements For Justification
+
+The aliases `Push` and `VPush` are aliases for `Stretch` and `VStretch`. `Stetch`, `VStretch`, and `Push` was in the 4.48.0 release. `VPush` will be in the 4.49.0 release.
+
+There are a couple of new Elements that help with layout justification (functions that act like elements to be precise).
+
+`Push` will push elements in a row away from it. If you have a row with a `Push` element on the left, then it will push the elements to the right of it to the right. If you have one on each end of a row, then the result will be the elements between them will be centered.
+
+`VPush` pushes rows of elements vertically in the same fashion that the `Push` does horizontally. Place a `VPush` on the first row and it will push the other rows to the very bottom of the container (e.g. window).
+
+This example centers a couple of elements in the middle of the window by surrounding them by `Push` and `VPush` elements.
+
+
+
diff --git a/docs/eCookbook/layouts/swapping-window-layouts.md b/docs/eCookbook/layouts/swapping-window-layouts.md
new file mode 100644
index 00000000..19953f8c
--- /dev/null
+++ b/docs/eCookbook/layouts/swapping-window-layouts.md
@@ -0,0 +1,10 @@
+**(Simulated) Swapping of Entire Window Contents**
+
+While it's not possible to make layouts that are truly dynamic in PySimpleGUI, you can make things appear they do.
+
+In this demo the goal is to swap out the entire window, except for the bottom row of buttons, with a completely different "layout".
+
+The way this is accomplished is to create multiple `Column` Elements that are all hidden except for the currently visible one.
+
+
+
diff --git a/docs/eCookbook/layouts/to-do-list-using-generated-layout.md b/docs/eCookbook/layouts/to-do-list-using-generated-layout.md
new file mode 100644
index 00000000..79b780da
--- /dev/null
+++ b/docs/eCookbook/layouts/to-do-list-using-generated-layout.md
@@ -0,0 +1,45 @@
+**Generated Layouts - To Do List Program**
+
+
+
+This program demonstrates how you can a Python "List Comprehension" to create
+a GUI layout. The layout is created in 3 steps.
+1. A title line
+2. The list of checkboxes and descriptions
+3. The buttons
+
+That is the layout that these 3 lines of code create
+
+```python
+layout = [[Text('My To Do List', font='Helvetica 15')]]
+layout += [[Text(f'{i}. '), CBox('', key=f'-CB{i}-'), Input(k=f'-IN{i}-')] for i in range(1,6)]
+layout += [[Button('Save'), Button('Load'), Button('Exit')]]
+```
+
+This program is a little different in that it imports the individual objects
+being used. Typically the import you'll find in most PySimpleGUI programs is
+
+```python
+import PySimpleGUI as sg
+```
+
+The result of importing each object is that you do not need the `sg.` before each function call, thus making the code even more compact. The layout looks cleaner as well.
+
+However, there are a few drawbacks. One is being able to easily spot calls to the PySimpleGUI package. Another is code completion. If you type `sg.` (control+SPACE) in an IDE, it will show you a list of choices from the PySimpleGUI pacakge that are available to you.
+
+It's being presented simply as another way of doing things. You'll find the other demos use
+
+```python
+import PySimpleGUI as sg
+```
+
+
+
+---
+
+**To Do List using "normal" import (`import PySimpleGUI as sg`)**
+
+In this version, the typical import statement is used. The program is identical to the one above, but you'll notice that each element and PySimpleGUI object now has `sg.` in front of it. Nearly all demo programs use this import convention and users have adopted it as well. It's a standard of sorts at this point.
+
+
+
diff --git a/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md b/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
new file mode 100644
index 00000000..feda9c58
--- /dev/null
+++ b/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/eCookbook/matplotlib/matplotlib-plot-browser.md b/docs/eCookbook/matplotlib/matplotlib-plot-browser.md
new file mode 100644
index 00000000..6f200304
--- /dev/null
+++ b/docs/eCookbook/matplotlib/matplotlib-plot-browser.md
@@ -0,0 +1,17 @@
+**Browse Matplot Examples - Click on list, See the Plot**
+
+This Demo Program was adapted to run on Trinket by shrinking down the size of the display window from 650,650 to 500,500. Shrinking the area makes the plots look a little crowded.
+
+These screenshots are from Windows. Click on the list on the left to view a plot.
+
+
+
+Slide up the "pane" on the bottom to reveal the source code for the plot you're viewing.
+
+
+
+Your application doesn't have to be this fancy. You could display your raw data in the hidden pane so that you can slide it up and view the underlying data.
+
+
+
+
diff --git a/docs/eCookbook/matplotlib/matplotlib-simple-plot.md b/docs/eCookbook/matplotlib/matplotlib-simple-plot.md
new file mode 100644
index 00000000..e7b33321
--- /dev/null
+++ b/docs/eCookbook/matplotlib/matplotlib-simple-plot.md
@@ -0,0 +1,20 @@
+This demo program shows how to create a single Matplotlib graph and show it in a GUI window.
+
+Note the it lacks an "Event Loop".
+Normally instead of:
+
+```python
+event, values = window.read()
+```
+
+You would see an event loop:
+```python
+while True:
+ event, values = window.read()
+ if event is None:
+ break
+ ```
+
+If you wanted to show multiple graphs or have other GUI elements, then you would replace that line of code with the event loop above and you'll have a "Normal" PySimpleGUI window.
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/matplotlib/matplotlib-single-plot.md b/docs/eCookbook/matplotlib/matplotlib-single-plot.md
new file mode 100644
index 00000000..637e63d6
--- /dev/null
+++ b/docs/eCookbook/matplotlib/matplotlib-single-plot.md
@@ -0,0 +1,20 @@
+## Single Matplotlib Plot
+
+This is your basic simple Matplotlib example
+
+What's nice about this demo is that it shows all of the parts required and each section is tiny
+
+You will paste your Matplotlib code at the top. The important thing to do is leave your drawing in a variable named `fig`
+
+There is a "helper" function in the middle.
+
+The bottom portion of the file is your GUI. There is only 1 line of code needed to take your Matplotlib drawing and place it into your GUI window. It is the call to `draw_figure`.
+
+This is how your window looks on Windows:
+
+
+
+
+
+
+
diff --git a/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md b/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
new file mode 100644
index 00000000..1f3afff7
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
@@ -0,0 +1,41 @@
+## Desektop Widget - Launcher Bar
+
+### Trivial Operations - Changing layouts
+
+This demo has a nice little "minimize" feature. You click on a downarrow and the entire interface will "minimize" down into a single image.
+
+Here is the code that does those minimize and restore operations:
+
+
+```python
+ 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)
+```
+
+If you're minimizing, then you want to hide the buttons and show the image. If you're restoring, then you're hiding the image and showing the panel of buttons.
+
+A simple thing to describe means less code for you and less complexity too.
+
+### The Button Bar
+
+Add a floating bar that enables easy launching of all programs on your system. Or launch your Python program or anything you want because you're a Python programmer.
+
+This is a copy of the Demo Program you'll find on the PySimpleGUI Repo:
+
+https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Desktop_Widget_Launcher_Bar.py
+
+It's a simple "launcher" application that you can run, move anywhere you want, and it'll return there next time you run it.
+
+Add your own buttons, images, etc, to launch your favorite programs, Python code, or call functions. Anything's possible when you write your own utilities
+
+
+
+For this Trinket, I matched the background color and used the settings feature to set it. This is why you will see a JSON file with the Trinket.
+
+
+
+
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
new file mode 100644
index 00000000..84682b74
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
@@ -0,0 +1,8 @@
+## Using a Thread to complete a long task
+
+The demo shows you how to use a thread to perform an operation that takes a long time to complete. Normally if you attempt to do these operations in your GUI code, it will cause your GUI to appear to have stopped.
+
+This examples relies on global variables for the handshake between the GUI and the worker thread. Other demos you'll find here use Queues to communicate. This demo is meant to be very simple so that you do not need to use a Queue.
+
+
+
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
new file mode 100644
index 00000000..730ae9b5
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
@@ -0,0 +1,10 @@
+### Using a Thread and a Queue To Accomplish Long Tasks
+
+Queues are a great way for threads to communicate. In this demo program we have a single long-operation that needs to be run. You'll find a function named `long_function_wrapper` where is where you will place your code that takes a long time to execute.
+
+When this function completes running, it sends a message to a Queue which is monitored by the main GUI thread.
+
+The GUI enables you to run more than 1 of these long-running tasks if you want. It keeps track of how many have been requested and tracks when each completes executing.
+
+
+
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md b/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
new file mode 100644
index 00000000..d6a5530d
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
@@ -0,0 +1,8 @@
+### Multiple Background Threads Outputting Results in GUI
+
+Sometimes you have situations where you have persistent threads that run constantly in the background. These threads may need to output information to your GUI. Becuase you cannot directly call PySimpleGUI (tkinter) from another Thread, a communication mechanism is needed for the threads to communicate with the main GUI thread.
+
+This communication is often in the form of a queue. This demo program runs 3 threads. Each update their status in the GUI by sending a message to a queue that the GUI is monitoring.
+
+
+
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md b/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
new file mode 100644
index 00000000..4105c8f7
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
@@ -0,0 +1,39 @@
+## Example using `Window.write_event_value`
+
+In July 2020 an important upgrade was added to the multithreaded capabilities of PySimpleGUI. Gone are the requirements to poll for incoming messages from threads. Now "events" from threads are received through the normal event loop.
+
+The technique has several benefits including:
+
+1. Efficiency - Polling is inefficient. Removing the polling added back a lot of CPI time
+2. Simplicity - Communicating between a window and a thread is a single function call, `Window.write_event_value`
+3. Encapsulation - The actual communication between the thread and the user's application is encapsulated within PySimpleGUI itself using a `queue.Queue` object.
+
+This specific demo shows a couple of newer features in addition to the `write_event_value` call. It also shows how the routing of `cprint` calls can be accomplished by the `Multiline` definition itself.
+
+### Communicating Between Thread and Event Loop
+
+The most important line of code in this entire program is this one:
+
+```python
+window.write_event_value('-THREAD-', (threading.current_thread().name, i))
+```
+
+This call will cause an event to be generated and is read in the event loop when the main program calls `window.read()`.
+
+In this example, the event that will be generated is `'-THREAD-'`
+The values dictionary will also have an entry associated with that "key". In this call we passed a tuple with the values:
+```python
+(threading.current_thread().name, i)
+```
+
+The first entry in the tuple is the name that Python assigned the thread. The second part of the tuple is a counter. You will see these values in the output window in red.
+
+
+### Screenshot on Windows
+
+On windows, the output looks something like this:
+
+
+
+
+
diff --git a/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md b/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
new file mode 100644
index 00000000..46b8d0df
--- /dev/null
+++ b/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
@@ -0,0 +1,37 @@
+## Easing into threading
+
+I'm assuming you're on this page because you've learned something new.... that calling a lengthy function from a GUI is not a straightforward operation if you want a good user experience.
+
+At some point in your GUI programming you're likely to run into this common, but distressing, problem of dealing with lengthy operations in a way that feels good to the user.
+
+The PySimpleGUI Cookbook doing into this in much more detail in this section about multi-threading:
+
+https://pysimplegui.readthedocs.io/en/latest/cookbook/#recipe-long-operations-multi-threading
+
+### Threading with some help...
+
+To get you over the initial hump of multi-threaded programming, you can let PySimpleGUI create and manage threads for you. Like other APIs in PySimpleGUI, it's been simplified down as far as possible.
+
+Here's the basic steps using `perform_long_operation`:
+
+1. Pass your function name and a key to the call to `window.perform_long_operation`
+2. Continue running your GUI event loop
+3. Windows pend using their typical `window.read()` call
+4. You will get the event when your function returns
+5. The values dictionary will contain your function's return value. They key will be the same as the event. So, `values[event]` is your function's return value.
+
+### Detailed Example
+
+In this example, your long operation takes a full 15 seconds.... an eternity when you're waiting with a GUI that is not operating during that timeframe.
+
+In this Trinket you're given 2 basic ways of performing your long operations:
+1. "Go" Button - This will directly call your function
+2. "Threaded" Button - This will use a thread to make the call
+
+Use the "Dummy" button to generate events to see if a window is responding to your clicks and typing. Try moving the window as well. You won't be able to when directly calling the function here on Trinket. You'll be able to on Windows, Linux, Mac, but not here on Trinket because of how titlebars are implemented. The details aren't important. What's important is that your window is not happy when you directly call your function.
+
+
+
+
+
+
diff --git a/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md b/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
new file mode 100644
index 00000000..c0aa48c2
--- /dev/null
+++ b/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
@@ -0,0 +1,4 @@
+**Running Multiple Windows in PySimpleGUI**
+
+
+
diff --git a/docs/eCookbook/multiple-windows/read-all-windows.md b/docs/eCookbook/multiple-windows/read-all-windows.md
new file mode 100644
index 00000000..67404058
--- /dev/null
+++ b/docs/eCookbook/multiple-windows/read-all-windows.md
@@ -0,0 +1,12 @@
+## "Read All Windows" - The easist multi-window approach
+
+Beginning in release 4.27.4 / 4.28.0 you'll find a new function `read_all_windows`. This function makes it possible to run multiple windows simultaneously without the requirement of running them with a timeout of the read call.
+
+The concept / function is simple. Instead of reading a window and getting back the event and values for that window, you call `read_all_windows` and get back the window, event, and values for the window that caused the event.
+
+This architecture makes the transition from a single to multiple windows much easier as the event loop remains exactly the same what you're used to for a single window.
+
+The demo program shows 2 windows that are both "live". Each window is capable of modifying the other. There is no timeout call made on the read, but the capability is there should you wish it put a timeout on the read all windows call.
+
+
+
diff --git a/docs/eCookbook/multiple-windows/two-windows-with-re-open.md b/docs/eCookbook/multiple-windows/two-windows-with-re-open.md
new file mode 100644
index 00000000..05655afd
--- /dev/null
+++ b/docs/eCookbook/multiple-windows/two-windows-with-re-open.md
@@ -0,0 +1,13 @@
+## Multiple Windows - Re-open Capability
+
+This demo uses the `read_all_windows` function (avilable only on the tkinter port currently)
+
+Each window has the ability to update the other. Additionally, Window 1 has a button to re-open Window 2 should you close Window 2.
+
+Here is how the program looks on Windows
+
+
+
+
+
+
diff --git a/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md b/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
new file mode 100644
index 00000000..854f1860
--- /dev/null
+++ b/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
@@ -0,0 +1,33 @@
+## Comparing PySimpleGUI with tkinter
+
+These are a fun exercise to go through... compare a tkinter solution to a problem with a PySimpleGUI solution. I like doing them because I'm basically copying an image of a window. It's easier to work on a problem when an image of the solution is provided.
+
+A number of sites have excellent problems for Python programmers to work through. Creating is how programming is learned. Project-based learning is perhaps the best way to learn to program because you're directly applying what you've learned and often you're adding something new to your knowledge as well.
+
+This problem is from the GeekforGeeks website.
+
+https://www.geeksforgeeks.org/python-mcq-quiz-game-using-tkinter/
+
+
+
+As explained on the website, the data for the quiz is located in file named data.json.
+
+### The PySimpleGUI Solution
+
+Because I wanted to duplicate the window exactly, the normal PySimpleGUI themes were bypassed and the default gray was used.
+
+The only part of the window that's been hard coded is the width of the title across the top. This was made extra wide to match the tkinter solution's hard coded window size. Rather than hard coding the entire window size, the preferred PySimpleGUI technique is to allow PySimpleGUI to fit the window to the content's size. If you want a larger window, then the best way to do that is to make the contents bigger.
+
+For spacing, the pad parameter could have been used, but to keep the program simple, I decided to simply add a Text element with spaces onto rows. It's more readable for the user and has no actual downside.
+
+The code is significantly shorter... The actual lines of code is 35. The tkinter version has 75. Some of this is due to the json package being wrapped by PySimpleGUI in the UserSettings API. There is a lot of whitespace in the tkinter version, so counting lines in the file is definitately not fair as the tkinter version is 219 lines and the PySimpleGUI version is 47 lines.
+
+
+
+
+
+
+### The tkinter Solution
+
+
+
diff --git a/docs/eCookbook/tables/mono-spaced-fonts.md b/docs/eCookbook/tables/mono-spaced-fonts.md
new file mode 100644
index 00000000..13911c5c
--- /dev/null
+++ b/docs/eCookbook/tables/mono-spaced-fonts.md
@@ -0,0 +1,27 @@
+## Mono-Spaced Fonts
+
+Let's start tables using text.
+
+One common problem when working with text and tables is how to get columns to align properly. Most fonts, including the default font, are variable spaced.... each character is a slightly different width than others.
+
+Here's an example using the font used on this webpage. Each of these rows of character are 10 chars long. But, they are clearly different lengths.
+
+
+1234567890
+aaaaaaaaaa
+iiiiiiiiii
+
+
+What to do? Entry our friend the mono-spaced font where each character takes up the exact same width as all the other characters. The most common of these mono-spaced fonts is "Courier". These same rows of characters, when formatted using a Courier font have the same length:
+
+```
+1234567890
+aaaaaaaaaa
+iiiiiiiiii
+```
+
+Now let's try this out in a PySimpleGUI program.
+
+This program presents a table in a Multiline element using a default font, which will have variable spaces. As you will initially see, the table is a mess. But, by changing the font of the Multiline to a Courier font, the table become tidy and clear.
+
+
diff --git a/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md b/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
new file mode 100644
index 00000000..eb6ce0d3
--- /dev/null
+++ b/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
@@ -0,0 +1,15 @@
+A "Mini-Excel" Table
+
+Can be used to:
+* Display numeric data
+* Use arrow keys to move around the table
+* Click on a header to sort table using that column (Column header will be bolded)
+
+On a Windows machine, the window appears like this:
+
+
+
+Clicking on one of the Column Headers (A - F) will cause the entire table to be sorted using that column as the key
+
+
+
diff --git a/docs/eCookbook/tables/simulated-tables.md b/docs/eCookbook/tables/simulated-tables.md
new file mode 100644
index 00000000..757b7e87
--- /dev/null
+++ b/docs/eCookbook/tables/simulated-tables.md
@@ -0,0 +1,16 @@
+
+"Simulated" Tables - Tables that are constructred using other Elements than the Table Element
+
+In this case it's simply some Text and InputText Elements combined.
+
+Here is what the window looks like on Windows
+
+
+
+
+This is a subset of the larger Table Simulation program that you'll also find on Trinket. This smaller demo shows a table and enables moving around with arrow keys.
+
+The larger demo includes the ability to sort columns. The reason for 2 demos.... make one that's smaller in case that's what you need. It removes the need for you to strip out unwanted code and you can instead begin to add your code to this smaller base of code.
+
+
+
\ No newline at end of file
diff --git a/docs/eCookbook/tables/table-element-getting-click-events.md b/docs/eCookbook/tables/table-element-getting-click-events.md
new file mode 100644
index 00000000..d29d80bc
--- /dev/null
+++ b/docs/eCookbook/tables/table-element-getting-click-events.md
@@ -0,0 +1,16 @@
+# Table Element
+
+## Click Events
+
+In relerase 4.48.0 a new parameter was added for all those Table Element fans out there.
+
+The boolean parameter `enable_click_events` in the Table element enables clicks of individual cells and the table headers to be detected and returned to you. This is exactly what's needed if you want to sort your table by columns for example.
+
+This example code can also be found in the Demo Programs section on the PySimpleGUI GitHub at http://demos.PySimpleGUI.org
+
+The Demo Program is named `Demo_Table_Element_Header_or_Cell_Clicks.py`
+
+Here's the demo code ready for you to run. Try clicking on the Column Headers to sort by that column.
+
+500
+
diff --git a/docs/eCookbook/tables/the-table-element.md b/docs/eCookbook/tables/the-table-element.md
new file mode 100644
index 00000000..fc191f68
--- /dev/null
+++ b/docs/eCookbook/tables/the-table-element.md
@@ -0,0 +1,9 @@
+The Table Element
+
+The `Table` Element is one of the more complex of the elements because there are so many things that are configured when the table is created. In a single line of code everything that is needed to build and display a table including headings, colors, colors, etc, are specified in the parameters passed when creating a `Table`.
+
+This is what the window looks like when run on Windows.
+
+
+
+
diff --git a/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md b/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
new file mode 100644
index 00000000..b3382c6a
--- /dev/null
+++ b/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
@@ -0,0 +1,6 @@
+The ability to output text in multiple colors has been a long-requested feature for PySimpleGUI. It's finally here.
+
+It should be noted that it does not use ANSI codes embedded into strings in order to accomplish this. Instead you specify the colors when you send the text to the `Multiline` element via its `update` method.
+
+
+
diff --git a/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md b/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
new file mode 100644
index 00000000..f2d95c72
--- /dev/null
+++ b/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
@@ -0,0 +1,21 @@
+# Udemy Course - "The Official PySimpleGUI Course"
+
+Released on Christmas 2021, [The Official PySimpleGUI Course](https://www.udemy.com/PySimpleGUI) is a 61 lesson course that covers PySimpleGUI in great detail. You'll learn the architecture, and be taught each element individually, in a way that enables you to skip around in the course.
+
+Trinket is being used for the Exercises that accompany the lessons. March 2022 is the expected timeline for the addition of the exercises. They're still being worked on.
+
+## Coupons
+
+[The PySimpleGUI documentation](http://www.PySimpleGUI.org) contains a coupon good for a discount on the course.
+
+## Supporting the PySimpleGUI Project
+
+The Udemy course is by far the best way you financially support the PySimpleGUI project. Of course direct donations via GitHub Sponsorship, BuyMeACoffee, etc, are another easy and effective way of helping keep the project alive.
+
+## Example Exercise
+
+You can check out one of the course's excises with this link. This exercise is for the lesson on the Image element.
+
+https://pysimpleguiudemy.herokuapp.com/Demo/Lesson37.php?password=demo
+
+Most of the Udemy Lessons now have exercises for you to complete after you've watched the lesson. Because Trinket is being used, you'll be able to write and execute PySimpleGUI code in your browser. I'm not aware of other GUI video courses that have exercises as part of the course that don't require you to have a local Python environment up and running.
diff --git a/docs/eCookbook/user-settings/ini-files.md b/docs/eCookbook/user-settings/ini-files.md
new file mode 100644
index 00000000..5c862ae7
--- /dev/null
+++ b/docs/eCookbook/user-settings/ini-files.md
@@ -0,0 +1,24 @@
+## UserSettings APIs
+
+In addition to the JSON file format, new in release 4.50.0 is the support of INI files.
+
+This file format is a little different than JSON. INI Files have a concept of "Sections" where JSON does not. In PySimpleGUI the UserSettings API calls and use of the `UserSettings` object are very similar.
+
+This demo shows how to use the UserSettings obiject to interface with these INI files. It's as easy as this to write a setting value:
+
+```python
+settings = sg.UserSettings(use_config_file=True)
+settings['Section']['setting'] = 'Some Value'
+```
+
+And reading is just as easy:
+
+```python
+value = settings['Section']['setting']
+```
+
+
+
+
+
+
diff --git a/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md b/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
new file mode 100644
index 00000000..eec77b07
--- /dev/null
+++ b/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
@@ -0,0 +1,8 @@
+## UserSettings as a Simple Database
+
+The UserSettings API can be used to store data like you would find in a database. Each entry in a UserSetting entry is a key to some data. In the case of this databsae example, that data is another dictionary that contains infomation about the entry.
+
+Tbis Demo Program shows a simple database that uses a "User ID" as the key, and there are a number of informational fields associated with each UserID. This informatoin is stored as a dictionary to make accessing the data simple.
+
+
+
diff --git a/docs/eCookbook/user-submitted-examples/language-selection.md b/docs/eCookbook/user-submitted-examples/language-selection.md
new file mode 100644
index 00000000..8a6317f0
--- /dev/null
+++ b/docs/eCookbook/user-submitted-examples/language-selection.md
@@ -0,0 +1,8 @@
+## Language Selection
+
+This example program come to us from GitHub user [jerrylususu](https://github.com/jerrylususu). You'll find the repo for this project here:
+
+https://github.com/jerrylususu/PySimpleGUI-Demo-LangSelect
+
+
+
diff --git a/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md b/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
new file mode 100644
index 00000000..da7d3391
--- /dev/null
+++ b/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
@@ -0,0 +1,16 @@
+Changing your buttons from plain rectangular GUI buttons to graphic images is very easy in PySimpleGUI.
+
+Button graphics are specified when creating the Button, inside of your layout.
+
+This is what the code below looks like running on Windows.
+
+
+
+
+
+
+This particular button graphic is larger than it needs to be. It should have been edited prior to use in the program. The size of the button as specified in the code is huge in comparison to the screenshot above. Removing the `image_subsamble=8` from the Button creation you'll see the full size of the button graphic.
+
+By the way, the `image_subsample` value indicated how much to "divide" the size by. The value of "8" specified above means to use 1/8 the size of the original. If the value was "2" then 1/2 of the original size will be shown.
+
+
diff --git a/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md b/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
new file mode 100644
index 00000000..e9db212a
--- /dev/null
+++ b/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
@@ -0,0 +1,33 @@
+A "Color Picker" or "Color Chooser"
+
+These selection windows are usually provided by the GUI framework. But let's say you wanted to replace the normal system one. One way to do it is using a grid of colored buttons.
+
+This code demonstrates:
+* Use of ttk buttons - they have beter highlighting then normal tk buttons
+* Setting border=0, padding=(0,0) and no_titlebar - makes a very minimal look
+* `Buttons`, like `Text`, do not need a text parameter filled in. It defaults to `''`
+
+Here is how the window looks running on Windows
+
+
+
+Setting the button size to (None, None) results in an extremely compact version
+
+
+
+A Qt version was easy to make. It required changing the import to `PySimpleGUIQt` and couple of tweaks to parameters. With the Qt version it's possible to specify Button sizes in pixels so it's possible to get the specific size you're seeking. In this case 20x20 pixel squares w3ere used.
+
+
+
+The same code even works on PySimpleGUIWeb
+
+
+
+And finally, the red-headed step-child port PySimpleGUIWx has no problem displying the window
+
+
+
+
+
+
+
diff --git a/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md b/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
new file mode 100644
index 00000000..de99ecfd
--- /dev/null
+++ b/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
@@ -0,0 +1,15 @@
+Show a "Notification Window"
+
+This is a very clever bit of code that was submitted by a PySimpleGUI user. It shows a "toaster" style of window (doesn't slide up/down but instead fades in/out). You can click on the notification window and it will immediately dismiss it.
+
+The fade-in/fade-out effects are not visible on Trinket but are if you download the code and run on your computer.
+
+This program demonstrates:
+* Computing screensize for placement of window
+* Using a no_titlebar setting to create a clean window that doesn't look like a "normal window"
+* Alpha channel used to fade window in and out
+* Embeds icons into the code itself thus removing the need for multiple files. Makes it possible to copy and paste the program into your code to add the feature.
+* Use of `Element.Widget` member variable to extend the PySimpleGUI feature set by directly accessing a tkinter setting. Used to create the "hand" cursor when mouse is over window
+* Using a single Graph Element to draw an entire window, placing graphics and text in a very precise manner. The entire window is a single Graph Element
+
+
From 0574702876d6a9a17ca683738b33d21569d1e8aa Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 30 Jun 2022 15:43:56 -0400
Subject: [PATCH 091/467] Flattened ecookbook.... nothing official... testing
some things out...
---
.../eCookbook/{examples-for-reddit-posts => }/1-4-24-dice-game.md | 0
.../adventure-game-popup-windows-with-delayed-text.md | 0
docs/eCookbook/{demo-programs => }/all-elements-simple-view.md | 0
docs/eCookbook/{animation => }/animated-gifs.md | 0
docs/eCookbook/{graph-element => }/animated-line-graph.md | 0
docs/eCookbook/{matplotlib => }/animated-matplotlib-line-graph.md | 0
.../{window-colors-and-graphics => }/base64-button-graphics.md | 0
docs/eCookbook/{games => }/battleship.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/calculator.md | 0
docs/eCookbook/{layouts => }/centered-and-simple.md | 0
.../change-slider-based-on-input.md | 0
.../{demo-programs => }/chat-instant-message-front-end.md | 0
.../{examples-for-reddit-posts => }/choose-file-from-a-list.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/coin-calculator.md | 0
docs/eCookbook/{layouts => }/collapsible-sections.md | 0
.../{window-colors-and-graphics => }/color-chooser-window.md | 0
docs/eCookbook/{demo-programs => }/control-panel.md | 0
docs/eCookbook/{games => }/conways-game-of-life.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/countdown-timer.md | 0
.../{examples-for-reddit-posts => }/counters-using-keyboard.md | 0
.../custom-checkboxes.md | 0
.../eCookbook/{custom-title-and-menu-bars => }/custom-menubars.md | 0
.../custom-radio-buttons.md | 0
.../{custom-title-and-menu-bars => }/custom-titlebars.md | 0
.../{examples-for-reddit-posts => }/dashboard-mockup-for-a-car.md | 0
docs/eCookbook/{graph-element => }/dashboard-mockup.md | 0
.../{demo-programs => }/design-pattern-1-the-one-shot.md | 0
.../design-pattern-2-persistent-window-with-updates.md | 0
.../desktop-timer-widget.md | 0
.../eCookbook/{multi-threaded => }/desktop-widget-launcher-bar.md | 0
docs/eCookbook/{games => }/dice-roller.md | 0
.../{examples-for-reddit-posts => }/distance-calculator.md | 0
.../fade-in-fade-out-notification-windows.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/fade-window.md | 0
.../{layouts => }/fixed-size-columns-with-justification.md | 0
.../focus-events-routing-custom-events-through-window-read.md | 0
docs/eCookbook/{graph-element => }/fourier-animated-graph.md | 0
docs/eCookbook/{graph-element => }/graph-element-bar-chart.md | 0
docs/eCookbook/{graph-element => }/graph-element-drag-a-square.md | 0
.../{graph-element => }/graph-element-drawing-and-dragging.md | 0
.../{graph-element => }/graph-element-line-graph-with-labels.md | 0
docs/eCookbook/{graph-element => }/graph-element-sine-wave.md | 0
docs/eCookbook/{demo-programs => }/informe-os-dados.md | 0
docs/eCookbook/{user-settings => }/ini-files.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/input-2-fields.md | 0
docs/eCookbook/{demo-programs => }/intro-to-this-page.md | 0
.../{examples-for-reddit-posts => }/ipynb-to-py-converter.md | 0
.../kilometer-to-mile-converter-for-reddit.md | 0
.../eCookbook/{user-submitted-examples => }/language-selection.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/login.md | 0
.../{examples-for-reddit-posts => }/machinerys-handbook.md | 0
docs/eCookbook/{matplotlib => }/matplotlib-plot-browser.md | 0
docs/eCookbook/{matplotlib => }/matplotlib-simple-plot.md | 0
docs/eCookbook/{matplotlib => }/matplotlib-single-plot.md | 0
.../{examples-for-reddit-posts => }/maze-solution-finder.md | 0
docs/eCookbook/{demo-programs => }/menu-bar.md | 0
docs/eCookbook/{demo-programs => }/menus.md | 0
docs/eCookbook/{games => }/minesweeper.md | 0
docs/eCookbook/{tables => }/mono-spaced-fonts.md | 0
.../{multi-threaded => }/multi-threaded-long-task-simple.md | 0
.../{multi-threaded => }/multi-threaded-long-task-using-queue.md | 0
.../multi-threaded-multiple-workder-threads.md | 0
docs/eCookbook/{demo-programs => }/multi-threaded-work.md | 0
.../{multi-threaded => }/multi-threaded-write-event-value.md | 0
.../{text => }/multiline-text-output-with-multiple-colors.md | 0
.../multiple-entry-in-same-window.md | 0
.../multiple-window-2-window-basic-design-pattern.md | 0
.../{tables => }/navigate-using-arrow-keys-sort-by-column.md | 0
.../eCookbook/{examples-for-reddit-posts => }/navigating-focus.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/password-entry.md | 0
.../{examples-for-reddit-posts => }/pi-temperature-control.md | 0
.../eCookbook/{examples-for-reddit-posts => }/png-image-viewer.md | 0
.../{examples-for-reddit-posts => }/printing-to-a-gui-window.md | 0
.../{demo-programs => }/psgdemos-pip-installable-demo-programs.md | 0
docs/eCookbook/{layouts => }/push-and-vpush-elements.md | 0
.../quiz-example-from-geekforgeeks.md | 0
docs/eCookbook/{multiple-windows => }/read-all-windows.md | 0
.../{examples-for-reddit-posts => }/reddit-c-to-c-frontend.md | 0
.../reddit-multiple-rows-option-menu.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/reddit-scraper.md | 0
.../sales-commission-calculator.md | 0
docs/eCookbook/{demo-programs => }/settings-file.md | 0
.../{examples-for-reddit-posts => }/shopify-reddit-mockup.md | 0
docs/eCookbook/{demo-programs => }/simple-form.md | 0
docs/eCookbook/{tables => }/simulated-tables.md | 0
.../spectrophotometry-from-twitter.md | 0
.../stats-the-update-periodically.md | 0
docs/eCookbook/{games => }/sudoku.md | 0
docs/eCookbook/{layouts => }/swapping-window-layouts.md | 0
docs/eCookbook/{tables => }/table-element-getting-click-events.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/text-adventure.md | 0
.../{demo-programs => }/the-basic-pysimplegui-program.md | 0
docs/eCookbook/{tables => }/the-table-element.md | 0
docs/eCookbook/{demo-programs => }/ti-datamath-ii-calculator.md | 0
docs/eCookbook/{examples-for-reddit-posts => }/tic-tac-toe.md | 0
.../{examples-for-reddit-posts => }/ticket-reservation.md | 0
docs/eCookbook/{layouts => }/to-do-list-using-generated-layout.md | 0
.../toggle-button-super-simple.md | 0
.../toggle-buttons.md | 0
docs/eCookbook/{multiple-windows => }/two-windows-with-re-open.md | 0
.../{udemy-course-master-pysimplegui => }/udemy-course.md | 0
docs/eCookbook/{games => }/uno-card-game.md | 0
.../{user-settings => }/usersettings-as-a-simple-database.md | 0
docs/eCookbook/{graph-element => }/utah-teapot.md | 0
.../{examples-for-reddit-posts => }/visual-basic-mockup.md | 0
.../{examples-for-reddit-posts => }/visual-basic-to-python.md | 0
docs/eCookbook/{graph-element => }/visualizing-sorts.md | 0
.../{multi-threaded => }/window-perform_long_operation-method.md | 0
docs/eCookbook/{games => }/wordle.md | 0
109 files changed, 0 insertions(+), 0 deletions(-)
rename docs/eCookbook/{examples-for-reddit-posts => }/1-4-24-dice-game.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/adventure-game-popup-windows-with-delayed-text.md (100%)
rename docs/eCookbook/{demo-programs => }/all-elements-simple-view.md (100%)
rename docs/eCookbook/{animation => }/animated-gifs.md (100%)
rename docs/eCookbook/{graph-element => }/animated-line-graph.md (100%)
rename docs/eCookbook/{matplotlib => }/animated-matplotlib-line-graph.md (100%)
rename docs/eCookbook/{window-colors-and-graphics => }/base64-button-graphics.md (100%)
rename docs/eCookbook/{games => }/battleship.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/calculator.md (100%)
rename docs/eCookbook/{layouts => }/centered-and-simple.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/change-slider-based-on-input.md (100%)
rename docs/eCookbook/{demo-programs => }/chat-instant-message-front-end.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/choose-file-from-a-list.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/coin-calculator.md (100%)
rename docs/eCookbook/{layouts => }/collapsible-sections.md (100%)
rename docs/eCookbook/{window-colors-and-graphics => }/color-chooser-window.md (100%)
rename docs/eCookbook/{demo-programs => }/control-panel.md (100%)
rename docs/eCookbook/{games => }/conways-game-of-life.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/countdown-timer.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/counters-using-keyboard.md (100%)
rename docs/eCookbook/{custom-elements-buttons-radio-buttons-etc => }/custom-checkboxes.md (100%)
rename docs/eCookbook/{custom-title-and-menu-bars => }/custom-menubars.md (100%)
rename docs/eCookbook/{custom-elements-buttons-radio-buttons-etc => }/custom-radio-buttons.md (100%)
rename docs/eCookbook/{custom-title-and-menu-bars => }/custom-titlebars.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/dashboard-mockup-for-a-car.md (100%)
rename docs/eCookbook/{graph-element => }/dashboard-mockup.md (100%)
rename docs/eCookbook/{demo-programs => }/design-pattern-1-the-one-shot.md (100%)
rename docs/eCookbook/{demo-programs => }/design-pattern-2-persistent-window-with-updates.md (100%)
rename docs/eCookbook/{async-windows-read-with-a-timeout => }/desktop-timer-widget.md (100%)
rename docs/eCookbook/{multi-threaded => }/desktop-widget-launcher-bar.md (100%)
rename docs/eCookbook/{games => }/dice-roller.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/distance-calculator.md (100%)
rename docs/eCookbook/{window-colors-and-graphics => }/fade-in-fade-out-notification-windows.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/fade-window.md (100%)
rename docs/eCookbook/{layouts => }/fixed-size-columns-with-justification.md (100%)
rename docs/eCookbook/{advanced => }/focus-events-routing-custom-events-through-window-read.md (100%)
rename docs/eCookbook/{graph-element => }/fourier-animated-graph.md (100%)
rename docs/eCookbook/{graph-element => }/graph-element-bar-chart.md (100%)
rename docs/eCookbook/{graph-element => }/graph-element-drag-a-square.md (100%)
rename docs/eCookbook/{graph-element => }/graph-element-drawing-and-dragging.md (100%)
rename docs/eCookbook/{graph-element => }/graph-element-line-graph-with-labels.md (100%)
rename docs/eCookbook/{graph-element => }/graph-element-sine-wave.md (100%)
rename docs/eCookbook/{demo-programs => }/informe-os-dados.md (100%)
rename docs/eCookbook/{user-settings => }/ini-files.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/input-2-fields.md (100%)
rename docs/eCookbook/{demo-programs => }/intro-to-this-page.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/ipynb-to-py-converter.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/kilometer-to-mile-converter-for-reddit.md (100%)
rename docs/eCookbook/{user-submitted-examples => }/language-selection.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/login.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/machinerys-handbook.md (100%)
rename docs/eCookbook/{matplotlib => }/matplotlib-plot-browser.md (100%)
rename docs/eCookbook/{matplotlib => }/matplotlib-simple-plot.md (100%)
rename docs/eCookbook/{matplotlib => }/matplotlib-single-plot.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/maze-solution-finder.md (100%)
rename docs/eCookbook/{demo-programs => }/menu-bar.md (100%)
rename docs/eCookbook/{demo-programs => }/menus.md (100%)
rename docs/eCookbook/{games => }/minesweeper.md (100%)
rename docs/eCookbook/{tables => }/mono-spaced-fonts.md (100%)
rename docs/eCookbook/{multi-threaded => }/multi-threaded-long-task-simple.md (100%)
rename docs/eCookbook/{multi-threaded => }/multi-threaded-long-task-using-queue.md (100%)
rename docs/eCookbook/{multi-threaded => }/multi-threaded-multiple-workder-threads.md (100%)
rename docs/eCookbook/{demo-programs => }/multi-threaded-work.md (100%)
rename docs/eCookbook/{multi-threaded => }/multi-threaded-write-event-value.md (100%)
rename docs/eCookbook/{text => }/multiline-text-output-with-multiple-colors.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/multiple-entry-in-same-window.md (100%)
rename docs/eCookbook/{multiple-windows => }/multiple-window-2-window-basic-design-pattern.md (100%)
rename docs/eCookbook/{tables => }/navigate-using-arrow-keys-sort-by-column.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/navigating-focus.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/password-entry.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/pi-temperature-control.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/png-image-viewer.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/printing-to-a-gui-window.md (100%)
rename docs/eCookbook/{demo-programs => }/psgdemos-pip-installable-demo-programs.md (100%)
rename docs/eCookbook/{layouts => }/push-and-vpush-elements.md (100%)
rename docs/eCookbook/{side-by-side-comparison => }/quiz-example-from-geekforgeeks.md (100%)
rename docs/eCookbook/{multiple-windows => }/read-all-windows.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/reddit-c-to-c-frontend.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/reddit-multiple-rows-option-menu.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/reddit-scraper.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/sales-commission-calculator.md (100%)
rename docs/eCookbook/{demo-programs => }/settings-file.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/shopify-reddit-mockup.md (100%)
rename docs/eCookbook/{demo-programs => }/simple-form.md (100%)
rename docs/eCookbook/{tables => }/simulated-tables.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/spectrophotometry-from-twitter.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/stats-the-update-periodically.md (100%)
rename docs/eCookbook/{games => }/sudoku.md (100%)
rename docs/eCookbook/{layouts => }/swapping-window-layouts.md (100%)
rename docs/eCookbook/{tables => }/table-element-getting-click-events.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/text-adventure.md (100%)
rename docs/eCookbook/{demo-programs => }/the-basic-pysimplegui-program.md (100%)
rename docs/eCookbook/{tables => }/the-table-element.md (100%)
rename docs/eCookbook/{demo-programs => }/ti-datamath-ii-calculator.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/tic-tac-toe.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/ticket-reservation.md (100%)
rename docs/eCookbook/{layouts => }/to-do-list-using-generated-layout.md (100%)
rename docs/eCookbook/{custom-elements-buttons-radio-buttons-etc => }/toggle-button-super-simple.md (100%)
rename docs/eCookbook/{custom-elements-buttons-radio-buttons-etc => }/toggle-buttons.md (100%)
rename docs/eCookbook/{multiple-windows => }/two-windows-with-re-open.md (100%)
rename docs/eCookbook/{udemy-course-master-pysimplegui => }/udemy-course.md (100%)
rename docs/eCookbook/{games => }/uno-card-game.md (100%)
rename docs/eCookbook/{user-settings => }/usersettings-as-a-simple-database.md (100%)
rename docs/eCookbook/{graph-element => }/utah-teapot.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/visual-basic-mockup.md (100%)
rename docs/eCookbook/{examples-for-reddit-posts => }/visual-basic-to-python.md (100%)
rename docs/eCookbook/{graph-element => }/visualizing-sorts.md (100%)
rename docs/eCookbook/{multi-threaded => }/window-perform_long_operation-method.md (100%)
rename docs/eCookbook/{games => }/wordle.md (100%)
diff --git a/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md b/docs/eCookbook/1-4-24-dice-game.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
rename to docs/eCookbook/1-4-24-dice-game.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md b/docs/eCookbook/adventure-game-popup-windows-with-delayed-text.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
rename to docs/eCookbook/adventure-game-popup-windows-with-delayed-text.md
diff --git a/docs/eCookbook/demo-programs/all-elements-simple-view.md b/docs/eCookbook/all-elements-simple-view.md
similarity index 100%
rename from docs/eCookbook/demo-programs/all-elements-simple-view.md
rename to docs/eCookbook/all-elements-simple-view.md
diff --git a/docs/eCookbook/animation/animated-gifs.md b/docs/eCookbook/animated-gifs.md
similarity index 100%
rename from docs/eCookbook/animation/animated-gifs.md
rename to docs/eCookbook/animated-gifs.md
diff --git a/docs/eCookbook/graph-element/animated-line-graph.md b/docs/eCookbook/animated-line-graph.md
similarity index 100%
rename from docs/eCookbook/graph-element/animated-line-graph.md
rename to docs/eCookbook/animated-line-graph.md
diff --git a/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md b/docs/eCookbook/animated-matplotlib-line-graph.md
similarity index 100%
rename from docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
rename to docs/eCookbook/animated-matplotlib-line-graph.md
diff --git a/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md b/docs/eCookbook/base64-button-graphics.md
similarity index 100%
rename from docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
rename to docs/eCookbook/base64-button-graphics.md
diff --git a/docs/eCookbook/games/battleship.md b/docs/eCookbook/battleship.md
similarity index 100%
rename from docs/eCookbook/games/battleship.md
rename to docs/eCookbook/battleship.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/calculator.md b/docs/eCookbook/calculator.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/calculator.md
rename to docs/eCookbook/calculator.md
diff --git a/docs/eCookbook/layouts/centered-and-simple.md b/docs/eCookbook/centered-and-simple.md
similarity index 100%
rename from docs/eCookbook/layouts/centered-and-simple.md
rename to docs/eCookbook/centered-and-simple.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md b/docs/eCookbook/change-slider-based-on-input.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
rename to docs/eCookbook/change-slider-based-on-input.md
diff --git a/docs/eCookbook/demo-programs/chat-instant-message-front-end.md b/docs/eCookbook/chat-instant-message-front-end.md
similarity index 100%
rename from docs/eCookbook/demo-programs/chat-instant-message-front-end.md
rename to docs/eCookbook/chat-instant-message-front-end.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md b/docs/eCookbook/choose-file-from-a-list.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
rename to docs/eCookbook/choose-file-from-a-list.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md b/docs/eCookbook/coin-calculator.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
rename to docs/eCookbook/coin-calculator.md
diff --git a/docs/eCookbook/layouts/collapsible-sections.md b/docs/eCookbook/collapsible-sections.md
similarity index 100%
rename from docs/eCookbook/layouts/collapsible-sections.md
rename to docs/eCookbook/collapsible-sections.md
diff --git a/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md b/docs/eCookbook/color-chooser-window.md
similarity index 100%
rename from docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
rename to docs/eCookbook/color-chooser-window.md
diff --git a/docs/eCookbook/demo-programs/control-panel.md b/docs/eCookbook/control-panel.md
similarity index 100%
rename from docs/eCookbook/demo-programs/control-panel.md
rename to docs/eCookbook/control-panel.md
diff --git a/docs/eCookbook/games/conways-game-of-life.md b/docs/eCookbook/conways-game-of-life.md
similarity index 100%
rename from docs/eCookbook/games/conways-game-of-life.md
rename to docs/eCookbook/conways-game-of-life.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md b/docs/eCookbook/countdown-timer.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
rename to docs/eCookbook/countdown-timer.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md b/docs/eCookbook/counters-using-keyboard.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
rename to docs/eCookbook/counters-using-keyboard.md
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md b/docs/eCookbook/custom-checkboxes.md
similarity index 100%
rename from docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
rename to docs/eCookbook/custom-checkboxes.md
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md b/docs/eCookbook/custom-menubars.md
similarity index 100%
rename from docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
rename to docs/eCookbook/custom-menubars.md
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md b/docs/eCookbook/custom-radio-buttons.md
similarity index 100%
rename from docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
rename to docs/eCookbook/custom-radio-buttons.md
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md b/docs/eCookbook/custom-titlebars.md
similarity index 100%
rename from docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
rename to docs/eCookbook/custom-titlebars.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md b/docs/eCookbook/dashboard-mockup-for-a-car.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
rename to docs/eCookbook/dashboard-mockup-for-a-car.md
diff --git a/docs/eCookbook/graph-element/dashboard-mockup.md b/docs/eCookbook/dashboard-mockup.md
similarity index 100%
rename from docs/eCookbook/graph-element/dashboard-mockup.md
rename to docs/eCookbook/dashboard-mockup.md
diff --git a/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md b/docs/eCookbook/design-pattern-1-the-one-shot.md
similarity index 100%
rename from docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
rename to docs/eCookbook/design-pattern-1-the-one-shot.md
diff --git a/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md b/docs/eCookbook/design-pattern-2-persistent-window-with-updates.md
similarity index 100%
rename from docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
rename to docs/eCookbook/design-pattern-2-persistent-window-with-updates.md
diff --git a/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md b/docs/eCookbook/desktop-timer-widget.md
similarity index 100%
rename from docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
rename to docs/eCookbook/desktop-timer-widget.md
diff --git a/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md b/docs/eCookbook/desktop-widget-launcher-bar.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
rename to docs/eCookbook/desktop-widget-launcher-bar.md
diff --git a/docs/eCookbook/games/dice-roller.md b/docs/eCookbook/dice-roller.md
similarity index 100%
rename from docs/eCookbook/games/dice-roller.md
rename to docs/eCookbook/dice-roller.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md b/docs/eCookbook/distance-calculator.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
rename to docs/eCookbook/distance-calculator.md
diff --git a/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md b/docs/eCookbook/fade-in-fade-out-notification-windows.md
similarity index 100%
rename from docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
rename to docs/eCookbook/fade-in-fade-out-notification-windows.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/fade-window.md b/docs/eCookbook/fade-window.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/fade-window.md
rename to docs/eCookbook/fade-window.md
diff --git a/docs/eCookbook/layouts/fixed-size-columns-with-justification.md b/docs/eCookbook/fixed-size-columns-with-justification.md
similarity index 100%
rename from docs/eCookbook/layouts/fixed-size-columns-with-justification.md
rename to docs/eCookbook/fixed-size-columns-with-justification.md
diff --git a/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md b/docs/eCookbook/focus-events-routing-custom-events-through-window-read.md
similarity index 100%
rename from docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
rename to docs/eCookbook/focus-events-routing-custom-events-through-window-read.md
diff --git a/docs/eCookbook/graph-element/fourier-animated-graph.md b/docs/eCookbook/fourier-animated-graph.md
similarity index 100%
rename from docs/eCookbook/graph-element/fourier-animated-graph.md
rename to docs/eCookbook/fourier-animated-graph.md
diff --git a/docs/eCookbook/graph-element/graph-element-bar-chart.md b/docs/eCookbook/graph-element-bar-chart.md
similarity index 100%
rename from docs/eCookbook/graph-element/graph-element-bar-chart.md
rename to docs/eCookbook/graph-element-bar-chart.md
diff --git a/docs/eCookbook/graph-element/graph-element-drag-a-square.md b/docs/eCookbook/graph-element-drag-a-square.md
similarity index 100%
rename from docs/eCookbook/graph-element/graph-element-drag-a-square.md
rename to docs/eCookbook/graph-element-drag-a-square.md
diff --git a/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md b/docs/eCookbook/graph-element-drawing-and-dragging.md
similarity index 100%
rename from docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
rename to docs/eCookbook/graph-element-drawing-and-dragging.md
diff --git a/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md b/docs/eCookbook/graph-element-line-graph-with-labels.md
similarity index 100%
rename from docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
rename to docs/eCookbook/graph-element-line-graph-with-labels.md
diff --git a/docs/eCookbook/graph-element/graph-element-sine-wave.md b/docs/eCookbook/graph-element-sine-wave.md
similarity index 100%
rename from docs/eCookbook/graph-element/graph-element-sine-wave.md
rename to docs/eCookbook/graph-element-sine-wave.md
diff --git a/docs/eCookbook/demo-programs/informe-os-dados.md b/docs/eCookbook/informe-os-dados.md
similarity index 100%
rename from docs/eCookbook/demo-programs/informe-os-dados.md
rename to docs/eCookbook/informe-os-dados.md
diff --git a/docs/eCookbook/user-settings/ini-files.md b/docs/eCookbook/ini-files.md
similarity index 100%
rename from docs/eCookbook/user-settings/ini-files.md
rename to docs/eCookbook/ini-files.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md b/docs/eCookbook/input-2-fields.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
rename to docs/eCookbook/input-2-fields.md
diff --git a/docs/eCookbook/demo-programs/intro-to-this-page.md b/docs/eCookbook/intro-to-this-page.md
similarity index 100%
rename from docs/eCookbook/demo-programs/intro-to-this-page.md
rename to docs/eCookbook/intro-to-this-page.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md b/docs/eCookbook/ipynb-to-py-converter.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
rename to docs/eCookbook/ipynb-to-py-converter.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md b/docs/eCookbook/kilometer-to-mile-converter-for-reddit.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
rename to docs/eCookbook/kilometer-to-mile-converter-for-reddit.md
diff --git a/docs/eCookbook/user-submitted-examples/language-selection.md b/docs/eCookbook/language-selection.md
similarity index 100%
rename from docs/eCookbook/user-submitted-examples/language-selection.md
rename to docs/eCookbook/language-selection.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/login.md b/docs/eCookbook/login.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/login.md
rename to docs/eCookbook/login.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md b/docs/eCookbook/machinerys-handbook.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
rename to docs/eCookbook/machinerys-handbook.md
diff --git a/docs/eCookbook/matplotlib/matplotlib-plot-browser.md b/docs/eCookbook/matplotlib-plot-browser.md
similarity index 100%
rename from docs/eCookbook/matplotlib/matplotlib-plot-browser.md
rename to docs/eCookbook/matplotlib-plot-browser.md
diff --git a/docs/eCookbook/matplotlib/matplotlib-simple-plot.md b/docs/eCookbook/matplotlib-simple-plot.md
similarity index 100%
rename from docs/eCookbook/matplotlib/matplotlib-simple-plot.md
rename to docs/eCookbook/matplotlib-simple-plot.md
diff --git a/docs/eCookbook/matplotlib/matplotlib-single-plot.md b/docs/eCookbook/matplotlib-single-plot.md
similarity index 100%
rename from docs/eCookbook/matplotlib/matplotlib-single-plot.md
rename to docs/eCookbook/matplotlib-single-plot.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md b/docs/eCookbook/maze-solution-finder.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
rename to docs/eCookbook/maze-solution-finder.md
diff --git a/docs/eCookbook/demo-programs/menu-bar.md b/docs/eCookbook/menu-bar.md
similarity index 100%
rename from docs/eCookbook/demo-programs/menu-bar.md
rename to docs/eCookbook/menu-bar.md
diff --git a/docs/eCookbook/demo-programs/menus.md b/docs/eCookbook/menus.md
similarity index 100%
rename from docs/eCookbook/demo-programs/menus.md
rename to docs/eCookbook/menus.md
diff --git a/docs/eCookbook/games/minesweeper.md b/docs/eCookbook/minesweeper.md
similarity index 100%
rename from docs/eCookbook/games/minesweeper.md
rename to docs/eCookbook/minesweeper.md
diff --git a/docs/eCookbook/tables/mono-spaced-fonts.md b/docs/eCookbook/mono-spaced-fonts.md
similarity index 100%
rename from docs/eCookbook/tables/mono-spaced-fonts.md
rename to docs/eCookbook/mono-spaced-fonts.md
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md b/docs/eCookbook/multi-threaded-long-task-simple.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
rename to docs/eCookbook/multi-threaded-long-task-simple.md
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md b/docs/eCookbook/multi-threaded-long-task-using-queue.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
rename to docs/eCookbook/multi-threaded-long-task-using-queue.md
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md b/docs/eCookbook/multi-threaded-multiple-workder-threads.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
rename to docs/eCookbook/multi-threaded-multiple-workder-threads.md
diff --git a/docs/eCookbook/demo-programs/multi-threaded-work.md b/docs/eCookbook/multi-threaded-work.md
similarity index 100%
rename from docs/eCookbook/demo-programs/multi-threaded-work.md
rename to docs/eCookbook/multi-threaded-work.md
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md b/docs/eCookbook/multi-threaded-write-event-value.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
rename to docs/eCookbook/multi-threaded-write-event-value.md
diff --git a/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md b/docs/eCookbook/multiline-text-output-with-multiple-colors.md
similarity index 100%
rename from docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
rename to docs/eCookbook/multiline-text-output-with-multiple-colors.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md b/docs/eCookbook/multiple-entry-in-same-window.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
rename to docs/eCookbook/multiple-entry-in-same-window.md
diff --git a/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md b/docs/eCookbook/multiple-window-2-window-basic-design-pattern.md
similarity index 100%
rename from docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
rename to docs/eCookbook/multiple-window-2-window-basic-design-pattern.md
diff --git a/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md b/docs/eCookbook/navigate-using-arrow-keys-sort-by-column.md
similarity index 100%
rename from docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
rename to docs/eCookbook/navigate-using-arrow-keys-sort-by-column.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md b/docs/eCookbook/navigating-focus.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
rename to docs/eCookbook/navigating-focus.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/password-entry.md b/docs/eCookbook/password-entry.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/password-entry.md
rename to docs/eCookbook/password-entry.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md b/docs/eCookbook/pi-temperature-control.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
rename to docs/eCookbook/pi-temperature-control.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md b/docs/eCookbook/png-image-viewer.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
rename to docs/eCookbook/png-image-viewer.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md b/docs/eCookbook/printing-to-a-gui-window.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
rename to docs/eCookbook/printing-to-a-gui-window.md
diff --git a/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md b/docs/eCookbook/psgdemos-pip-installable-demo-programs.md
similarity index 100%
rename from docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
rename to docs/eCookbook/psgdemos-pip-installable-demo-programs.md
diff --git a/docs/eCookbook/layouts/push-and-vpush-elements.md b/docs/eCookbook/push-and-vpush-elements.md
similarity index 100%
rename from docs/eCookbook/layouts/push-and-vpush-elements.md
rename to docs/eCookbook/push-and-vpush-elements.md
diff --git a/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md b/docs/eCookbook/quiz-example-from-geekforgeeks.md
similarity index 100%
rename from docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
rename to docs/eCookbook/quiz-example-from-geekforgeeks.md
diff --git a/docs/eCookbook/multiple-windows/read-all-windows.md b/docs/eCookbook/read-all-windows.md
similarity index 100%
rename from docs/eCookbook/multiple-windows/read-all-windows.md
rename to docs/eCookbook/read-all-windows.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md b/docs/eCookbook/reddit-c-to-c-frontend.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
rename to docs/eCookbook/reddit-c-to-c-frontend.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md b/docs/eCookbook/reddit-multiple-rows-option-menu.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
rename to docs/eCookbook/reddit-multiple-rows-option-menu.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md b/docs/eCookbook/reddit-scraper.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
rename to docs/eCookbook/reddit-scraper.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md b/docs/eCookbook/sales-commission-calculator.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
rename to docs/eCookbook/sales-commission-calculator.md
diff --git a/docs/eCookbook/demo-programs/settings-file.md b/docs/eCookbook/settings-file.md
similarity index 100%
rename from docs/eCookbook/demo-programs/settings-file.md
rename to docs/eCookbook/settings-file.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md b/docs/eCookbook/shopify-reddit-mockup.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
rename to docs/eCookbook/shopify-reddit-mockup.md
diff --git a/docs/eCookbook/demo-programs/simple-form.md b/docs/eCookbook/simple-form.md
similarity index 100%
rename from docs/eCookbook/demo-programs/simple-form.md
rename to docs/eCookbook/simple-form.md
diff --git a/docs/eCookbook/tables/simulated-tables.md b/docs/eCookbook/simulated-tables.md
similarity index 100%
rename from docs/eCookbook/tables/simulated-tables.md
rename to docs/eCookbook/simulated-tables.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md b/docs/eCookbook/spectrophotometry-from-twitter.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
rename to docs/eCookbook/spectrophotometry-from-twitter.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md b/docs/eCookbook/stats-the-update-periodically.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
rename to docs/eCookbook/stats-the-update-periodically.md
diff --git a/docs/eCookbook/games/sudoku.md b/docs/eCookbook/sudoku.md
similarity index 100%
rename from docs/eCookbook/games/sudoku.md
rename to docs/eCookbook/sudoku.md
diff --git a/docs/eCookbook/layouts/swapping-window-layouts.md b/docs/eCookbook/swapping-window-layouts.md
similarity index 100%
rename from docs/eCookbook/layouts/swapping-window-layouts.md
rename to docs/eCookbook/swapping-window-layouts.md
diff --git a/docs/eCookbook/tables/table-element-getting-click-events.md b/docs/eCookbook/table-element-getting-click-events.md
similarity index 100%
rename from docs/eCookbook/tables/table-element-getting-click-events.md
rename to docs/eCookbook/table-element-getting-click-events.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/text-adventure.md b/docs/eCookbook/text-adventure.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/text-adventure.md
rename to docs/eCookbook/text-adventure.md
diff --git a/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md b/docs/eCookbook/the-basic-pysimplegui-program.md
similarity index 100%
rename from docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
rename to docs/eCookbook/the-basic-pysimplegui-program.md
diff --git a/docs/eCookbook/tables/the-table-element.md b/docs/eCookbook/the-table-element.md
similarity index 100%
rename from docs/eCookbook/tables/the-table-element.md
rename to docs/eCookbook/the-table-element.md
diff --git a/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md b/docs/eCookbook/ti-datamath-ii-calculator.md
similarity index 100%
rename from docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
rename to docs/eCookbook/ti-datamath-ii-calculator.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md b/docs/eCookbook/tic-tac-toe.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
rename to docs/eCookbook/tic-tac-toe.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md b/docs/eCookbook/ticket-reservation.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
rename to docs/eCookbook/ticket-reservation.md
diff --git a/docs/eCookbook/layouts/to-do-list-using-generated-layout.md b/docs/eCookbook/to-do-list-using-generated-layout.md
similarity index 100%
rename from docs/eCookbook/layouts/to-do-list-using-generated-layout.md
rename to docs/eCookbook/to-do-list-using-generated-layout.md
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md b/docs/eCookbook/toggle-button-super-simple.md
similarity index 100%
rename from docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
rename to docs/eCookbook/toggle-button-super-simple.md
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md b/docs/eCookbook/toggle-buttons.md
similarity index 100%
rename from docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
rename to docs/eCookbook/toggle-buttons.md
diff --git a/docs/eCookbook/multiple-windows/two-windows-with-re-open.md b/docs/eCookbook/two-windows-with-re-open.md
similarity index 100%
rename from docs/eCookbook/multiple-windows/two-windows-with-re-open.md
rename to docs/eCookbook/two-windows-with-re-open.md
diff --git a/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md b/docs/eCookbook/udemy-course.md
similarity index 100%
rename from docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
rename to docs/eCookbook/udemy-course.md
diff --git a/docs/eCookbook/games/uno-card-game.md b/docs/eCookbook/uno-card-game.md
similarity index 100%
rename from docs/eCookbook/games/uno-card-game.md
rename to docs/eCookbook/uno-card-game.md
diff --git a/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md b/docs/eCookbook/usersettings-as-a-simple-database.md
similarity index 100%
rename from docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
rename to docs/eCookbook/usersettings-as-a-simple-database.md
diff --git a/docs/eCookbook/graph-element/utah-teapot.md b/docs/eCookbook/utah-teapot.md
similarity index 100%
rename from docs/eCookbook/graph-element/utah-teapot.md
rename to docs/eCookbook/utah-teapot.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md b/docs/eCookbook/visual-basic-mockup.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
rename to docs/eCookbook/visual-basic-mockup.md
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md b/docs/eCookbook/visual-basic-to-python.md
similarity index 100%
rename from docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
rename to docs/eCookbook/visual-basic-to-python.md
diff --git a/docs/eCookbook/graph-element/visualizing-sorts.md b/docs/eCookbook/visualizing-sorts.md
similarity index 100%
rename from docs/eCookbook/graph-element/visualizing-sorts.md
rename to docs/eCookbook/visualizing-sorts.md
diff --git a/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md b/docs/eCookbook/window-perform_long_operation-method.md
similarity index 100%
rename from docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
rename to docs/eCookbook/window-perform_long_operation-method.md
diff --git a/docs/eCookbook/games/wordle.md b/docs/eCookbook/wordle.md
similarity index 100%
rename from docs/eCookbook/games/wordle.md
rename to docs/eCookbook/wordle.md
From 9f40a47d30a9469b55687b66c2649d3e4da83712 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Thu, 30 Jun 2022 15:54:57 -0400
Subject: [PATCH 092/467] ecookbook restoring the folders for testing...
---
.../focus-events-routing-custom-events-through-window-read.md | 0
docs/eCookbook/{ => animation}/animated-gifs.md | 0
.../desktop-timer-widget.md | 0
.../custom-checkboxes.md | 0
.../custom-radio-buttons.md | 0
.../toggle-button-super-simple.md | 0
.../toggle-buttons.md | 0
.../eCookbook/{ => custom-title-and-menu-bars}/custom-menubars.md | 0
.../{ => custom-title-and-menu-bars}/custom-titlebars.md | 0
docs/eCookbook/{ => demo-programs}/all-elements-simple-view.md | 0
.../{ => demo-programs}/chat-instant-message-front-end.md | 0
docs/eCookbook/{ => demo-programs}/control-panel.md | 0
.../{ => demo-programs}/design-pattern-1-the-one-shot.md | 0
.../design-pattern-2-persistent-window-with-updates.md | 0
docs/eCookbook/{ => demo-programs}/informe-os-dados.md | 0
docs/eCookbook/{ => demo-programs}/intro-to-this-page.md | 0
docs/eCookbook/{ => demo-programs}/menu-bar.md | 0
docs/eCookbook/{ => demo-programs}/menus.md | 0
docs/eCookbook/{ => demo-programs}/multi-threaded-work.md | 0
.../{ => demo-programs}/psgdemos-pip-installable-demo-programs.md | 0
docs/eCookbook/{ => demo-programs}/settings-file.md | 0
docs/eCookbook/{ => demo-programs}/simple-form.md | 0
.../{ => demo-programs}/the-basic-pysimplegui-program.md | 0
docs/eCookbook/{ => demo-programs}/ti-datamath-ii-calculator.md | 0
.../eCookbook/{ => examples-for-reddit-posts}/1-4-24-dice-game.md | 0
.../adventure-game-popup-windows-with-delayed-text.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/calculator.md | 0
.../change-slider-based-on-input.md | 0
.../{ => examples-for-reddit-posts}/choose-file-from-a-list.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/coin-calculator.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/countdown-timer.md | 0
.../{ => examples-for-reddit-posts}/counters-using-keyboard.md | 0
.../{ => examples-for-reddit-posts}/dashboard-mockup-for-a-car.md | 0
.../{ => examples-for-reddit-posts}/distance-calculator.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/fade-window.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/input-2-fields.md | 0
.../{ => examples-for-reddit-posts}/ipynb-to-py-converter.md | 0
.../kilometer-to-mile-converter-for-reddit.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/login.md | 0
.../{ => examples-for-reddit-posts}/machinerys-handbook.md | 0
.../{ => examples-for-reddit-posts}/maze-solution-finder.md | 0
.../multiple-entry-in-same-window.md | 0
.../eCookbook/{ => examples-for-reddit-posts}/navigating-focus.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/password-entry.md | 0
.../{ => examples-for-reddit-posts}/pi-temperature-control.md | 0
.../eCookbook/{ => examples-for-reddit-posts}/png-image-viewer.md | 0
.../{ => examples-for-reddit-posts}/printing-to-a-gui-window.md | 0
.../{ => examples-for-reddit-posts}/reddit-c-to-c-frontend.md | 0
.../reddit-multiple-rows-option-menu.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/reddit-scraper.md | 0
.../sales-commission-calculator.md | 0
.../{ => examples-for-reddit-posts}/shopify-reddit-mockup.md | 0
.../spectrophotometry-from-twitter.md | 0
.../stats-the-update-periodically.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/text-adventure.md | 0
docs/eCookbook/{ => examples-for-reddit-posts}/tic-tac-toe.md | 0
.../{ => examples-for-reddit-posts}/ticket-reservation.md | 0
.../{ => examples-for-reddit-posts}/visual-basic-mockup.md | 0
.../{ => examples-for-reddit-posts}/visual-basic-to-python.md | 0
docs/eCookbook/{ => games}/battleship.md | 0
docs/eCookbook/{ => games}/conways-game-of-life.md | 0
docs/eCookbook/{ => games}/dice-roller.md | 0
docs/eCookbook/{ => games}/minesweeper.md | 0
docs/eCookbook/{ => games}/sudoku.md | 0
docs/eCookbook/{ => games}/uno-card-game.md | 0
docs/eCookbook/{ => games}/wordle.md | 0
docs/eCookbook/{ => graph-element}/animated-line-graph.md | 0
docs/eCookbook/{ => graph-element}/dashboard-mockup.md | 0
docs/eCookbook/{ => graph-element}/fourier-animated-graph.md | 0
docs/eCookbook/{ => graph-element}/graph-element-bar-chart.md | 0
docs/eCookbook/{ => graph-element}/graph-element-drag-a-square.md | 0
.../{ => graph-element}/graph-element-drawing-and-dragging.md | 0
.../{ => graph-element}/graph-element-line-graph-with-labels.md | 0
docs/eCookbook/{ => graph-element}/graph-element-sine-wave.md | 0
docs/eCookbook/{ => graph-element}/utah-teapot.md | 0
docs/eCookbook/{ => graph-element}/visualizing-sorts.md | 0
docs/eCookbook/{ => layouts}/centered-and-simple.md | 0
docs/eCookbook/{ => layouts}/collapsible-sections.md | 0
.../{ => layouts}/fixed-size-columns-with-justification.md | 0
docs/eCookbook/{ => layouts}/push-and-vpush-elements.md | 0
docs/eCookbook/{ => layouts}/swapping-window-layouts.md | 0
docs/eCookbook/{ => layouts}/to-do-list-using-generated-layout.md | 0
docs/eCookbook/{ => matplotlib}/animated-matplotlib-line-graph.md | 0
docs/eCookbook/{ => matplotlib}/matplotlib-plot-browser.md | 0
docs/eCookbook/{ => matplotlib}/matplotlib-simple-plot.md | 0
docs/eCookbook/{ => matplotlib}/matplotlib-single-plot.md | 0
.../eCookbook/{ => multi-threaded}/desktop-widget-launcher-bar.md | 0
.../{ => multi-threaded}/multi-threaded-long-task-simple.md | 0
.../{ => multi-threaded}/multi-threaded-long-task-using-queue.md | 0
.../multi-threaded-multiple-workder-threads.md | 0
.../{ => multi-threaded}/multi-threaded-write-event-value.md | 0
.../{ => multi-threaded}/window-perform_long_operation-method.md | 0
.../multiple-window-2-window-basic-design-pattern.md | 0
docs/eCookbook/{ => multiple-windows}/read-all-windows.md | 0
docs/eCookbook/{ => multiple-windows}/two-windows-with-re-open.md | 0
.../quiz-example-from-geekforgeeks.md | 0
docs/eCookbook/{ => tables}/mono-spaced-fonts.md | 0
.../{ => tables}/navigate-using-arrow-keys-sort-by-column.md | 0
docs/eCookbook/{ => tables}/simulated-tables.md | 0
docs/eCookbook/{ => tables}/table-element-getting-click-events.md | 0
docs/eCookbook/{ => tables}/the-table-element.md | 0
.../{ => text}/multiline-text-output-with-multiple-colors.md | 0
.../{ => udemy-course-master-pysimplegui}/udemy-course.md | 0
docs/eCookbook/{ => user-settings}/ini-files.md | 0
.../{ => user-settings}/usersettings-as-a-simple-database.md | 0
.../eCookbook/{ => user-submitted-examples}/language-selection.md | 0
.../{ => window-colors-and-graphics}/base64-button-graphics.md | 0
.../{ => window-colors-and-graphics}/color-chooser-window.md | 0
.../fade-in-fade-out-notification-windows.md | 0
109 files changed, 0 insertions(+), 0 deletions(-)
rename docs/eCookbook/{ => advanced}/focus-events-routing-custom-events-through-window-read.md (100%)
rename docs/eCookbook/{ => animation}/animated-gifs.md (100%)
rename docs/eCookbook/{ => async-windows-read-with-a-timeout}/desktop-timer-widget.md (100%)
rename docs/eCookbook/{ => custom-elements-buttons-radio-buttons-etc}/custom-checkboxes.md (100%)
rename docs/eCookbook/{ => custom-elements-buttons-radio-buttons-etc}/custom-radio-buttons.md (100%)
rename docs/eCookbook/{ => custom-elements-buttons-radio-buttons-etc}/toggle-button-super-simple.md (100%)
rename docs/eCookbook/{ => custom-elements-buttons-radio-buttons-etc}/toggle-buttons.md (100%)
rename docs/eCookbook/{ => custom-title-and-menu-bars}/custom-menubars.md (100%)
rename docs/eCookbook/{ => custom-title-and-menu-bars}/custom-titlebars.md (100%)
rename docs/eCookbook/{ => demo-programs}/all-elements-simple-view.md (100%)
rename docs/eCookbook/{ => demo-programs}/chat-instant-message-front-end.md (100%)
rename docs/eCookbook/{ => demo-programs}/control-panel.md (100%)
rename docs/eCookbook/{ => demo-programs}/design-pattern-1-the-one-shot.md (100%)
rename docs/eCookbook/{ => demo-programs}/design-pattern-2-persistent-window-with-updates.md (100%)
rename docs/eCookbook/{ => demo-programs}/informe-os-dados.md (100%)
rename docs/eCookbook/{ => demo-programs}/intro-to-this-page.md (100%)
rename docs/eCookbook/{ => demo-programs}/menu-bar.md (100%)
rename docs/eCookbook/{ => demo-programs}/menus.md (100%)
rename docs/eCookbook/{ => demo-programs}/multi-threaded-work.md (100%)
rename docs/eCookbook/{ => demo-programs}/psgdemos-pip-installable-demo-programs.md (100%)
rename docs/eCookbook/{ => demo-programs}/settings-file.md (100%)
rename docs/eCookbook/{ => demo-programs}/simple-form.md (100%)
rename docs/eCookbook/{ => demo-programs}/the-basic-pysimplegui-program.md (100%)
rename docs/eCookbook/{ => demo-programs}/ti-datamath-ii-calculator.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/1-4-24-dice-game.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/adventure-game-popup-windows-with-delayed-text.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/calculator.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/change-slider-based-on-input.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/choose-file-from-a-list.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/coin-calculator.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/countdown-timer.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/counters-using-keyboard.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/dashboard-mockup-for-a-car.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/distance-calculator.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/fade-window.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/input-2-fields.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/ipynb-to-py-converter.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/kilometer-to-mile-converter-for-reddit.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/login.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/machinerys-handbook.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/maze-solution-finder.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/multiple-entry-in-same-window.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/navigating-focus.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/password-entry.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/pi-temperature-control.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/png-image-viewer.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/printing-to-a-gui-window.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/reddit-c-to-c-frontend.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/reddit-multiple-rows-option-menu.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/reddit-scraper.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/sales-commission-calculator.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/shopify-reddit-mockup.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/spectrophotometry-from-twitter.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/stats-the-update-periodically.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/text-adventure.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/tic-tac-toe.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/ticket-reservation.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/visual-basic-mockup.md (100%)
rename docs/eCookbook/{ => examples-for-reddit-posts}/visual-basic-to-python.md (100%)
rename docs/eCookbook/{ => games}/battleship.md (100%)
rename docs/eCookbook/{ => games}/conways-game-of-life.md (100%)
rename docs/eCookbook/{ => games}/dice-roller.md (100%)
rename docs/eCookbook/{ => games}/minesweeper.md (100%)
rename docs/eCookbook/{ => games}/sudoku.md (100%)
rename docs/eCookbook/{ => games}/uno-card-game.md (100%)
rename docs/eCookbook/{ => games}/wordle.md (100%)
rename docs/eCookbook/{ => graph-element}/animated-line-graph.md (100%)
rename docs/eCookbook/{ => graph-element}/dashboard-mockup.md (100%)
rename docs/eCookbook/{ => graph-element}/fourier-animated-graph.md (100%)
rename docs/eCookbook/{ => graph-element}/graph-element-bar-chart.md (100%)
rename docs/eCookbook/{ => graph-element}/graph-element-drag-a-square.md (100%)
rename docs/eCookbook/{ => graph-element}/graph-element-drawing-and-dragging.md (100%)
rename docs/eCookbook/{ => graph-element}/graph-element-line-graph-with-labels.md (100%)
rename docs/eCookbook/{ => graph-element}/graph-element-sine-wave.md (100%)
rename docs/eCookbook/{ => graph-element}/utah-teapot.md (100%)
rename docs/eCookbook/{ => graph-element}/visualizing-sorts.md (100%)
rename docs/eCookbook/{ => layouts}/centered-and-simple.md (100%)
rename docs/eCookbook/{ => layouts}/collapsible-sections.md (100%)
rename docs/eCookbook/{ => layouts}/fixed-size-columns-with-justification.md (100%)
rename docs/eCookbook/{ => layouts}/push-and-vpush-elements.md (100%)
rename docs/eCookbook/{ => layouts}/swapping-window-layouts.md (100%)
rename docs/eCookbook/{ => layouts}/to-do-list-using-generated-layout.md (100%)
rename docs/eCookbook/{ => matplotlib}/animated-matplotlib-line-graph.md (100%)
rename docs/eCookbook/{ => matplotlib}/matplotlib-plot-browser.md (100%)
rename docs/eCookbook/{ => matplotlib}/matplotlib-simple-plot.md (100%)
rename docs/eCookbook/{ => matplotlib}/matplotlib-single-plot.md (100%)
rename docs/eCookbook/{ => multi-threaded}/desktop-widget-launcher-bar.md (100%)
rename docs/eCookbook/{ => multi-threaded}/multi-threaded-long-task-simple.md (100%)
rename docs/eCookbook/{ => multi-threaded}/multi-threaded-long-task-using-queue.md (100%)
rename docs/eCookbook/{ => multi-threaded}/multi-threaded-multiple-workder-threads.md (100%)
rename docs/eCookbook/{ => multi-threaded}/multi-threaded-write-event-value.md (100%)
rename docs/eCookbook/{ => multi-threaded}/window-perform_long_operation-method.md (100%)
rename docs/eCookbook/{ => multiple-windows}/multiple-window-2-window-basic-design-pattern.md (100%)
rename docs/eCookbook/{ => multiple-windows}/read-all-windows.md (100%)
rename docs/eCookbook/{ => multiple-windows}/two-windows-with-re-open.md (100%)
rename docs/eCookbook/{ => side-by-side-comparison}/quiz-example-from-geekforgeeks.md (100%)
rename docs/eCookbook/{ => tables}/mono-spaced-fonts.md (100%)
rename docs/eCookbook/{ => tables}/navigate-using-arrow-keys-sort-by-column.md (100%)
rename docs/eCookbook/{ => tables}/simulated-tables.md (100%)
rename docs/eCookbook/{ => tables}/table-element-getting-click-events.md (100%)
rename docs/eCookbook/{ => tables}/the-table-element.md (100%)
rename docs/eCookbook/{ => text}/multiline-text-output-with-multiple-colors.md (100%)
rename docs/eCookbook/{ => udemy-course-master-pysimplegui}/udemy-course.md (100%)
rename docs/eCookbook/{ => user-settings}/ini-files.md (100%)
rename docs/eCookbook/{ => user-settings}/usersettings-as-a-simple-database.md (100%)
rename docs/eCookbook/{ => user-submitted-examples}/language-selection.md (100%)
rename docs/eCookbook/{ => window-colors-and-graphics}/base64-button-graphics.md (100%)
rename docs/eCookbook/{ => window-colors-and-graphics}/color-chooser-window.md (100%)
rename docs/eCookbook/{ => window-colors-and-graphics}/fade-in-fade-out-notification-windows.md (100%)
diff --git a/docs/eCookbook/focus-events-routing-custom-events-through-window-read.md b/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
similarity index 100%
rename from docs/eCookbook/focus-events-routing-custom-events-through-window-read.md
rename to docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
diff --git a/docs/eCookbook/animated-gifs.md b/docs/eCookbook/animation/animated-gifs.md
similarity index 100%
rename from docs/eCookbook/animated-gifs.md
rename to docs/eCookbook/animation/animated-gifs.md
diff --git a/docs/eCookbook/desktop-timer-widget.md b/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
similarity index 100%
rename from docs/eCookbook/desktop-timer-widget.md
rename to docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
diff --git a/docs/eCookbook/custom-checkboxes.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
similarity index 100%
rename from docs/eCookbook/custom-checkboxes.md
rename to docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
diff --git a/docs/eCookbook/custom-radio-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
similarity index 100%
rename from docs/eCookbook/custom-radio-buttons.md
rename to docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
diff --git a/docs/eCookbook/toggle-button-super-simple.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
similarity index 100%
rename from docs/eCookbook/toggle-button-super-simple.md
rename to docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
diff --git a/docs/eCookbook/toggle-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
similarity index 100%
rename from docs/eCookbook/toggle-buttons.md
rename to docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
diff --git a/docs/eCookbook/custom-menubars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
similarity index 100%
rename from docs/eCookbook/custom-menubars.md
rename to docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
diff --git a/docs/eCookbook/custom-titlebars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
similarity index 100%
rename from docs/eCookbook/custom-titlebars.md
rename to docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
diff --git a/docs/eCookbook/all-elements-simple-view.md b/docs/eCookbook/demo-programs/all-elements-simple-view.md
similarity index 100%
rename from docs/eCookbook/all-elements-simple-view.md
rename to docs/eCookbook/demo-programs/all-elements-simple-view.md
diff --git a/docs/eCookbook/chat-instant-message-front-end.md b/docs/eCookbook/demo-programs/chat-instant-message-front-end.md
similarity index 100%
rename from docs/eCookbook/chat-instant-message-front-end.md
rename to docs/eCookbook/demo-programs/chat-instant-message-front-end.md
diff --git a/docs/eCookbook/control-panel.md b/docs/eCookbook/demo-programs/control-panel.md
similarity index 100%
rename from docs/eCookbook/control-panel.md
rename to docs/eCookbook/demo-programs/control-panel.md
diff --git a/docs/eCookbook/design-pattern-1-the-one-shot.md b/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
similarity index 100%
rename from docs/eCookbook/design-pattern-1-the-one-shot.md
rename to docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
diff --git a/docs/eCookbook/design-pattern-2-persistent-window-with-updates.md b/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
similarity index 100%
rename from docs/eCookbook/design-pattern-2-persistent-window-with-updates.md
rename to docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
diff --git a/docs/eCookbook/informe-os-dados.md b/docs/eCookbook/demo-programs/informe-os-dados.md
similarity index 100%
rename from docs/eCookbook/informe-os-dados.md
rename to docs/eCookbook/demo-programs/informe-os-dados.md
diff --git a/docs/eCookbook/intro-to-this-page.md b/docs/eCookbook/demo-programs/intro-to-this-page.md
similarity index 100%
rename from docs/eCookbook/intro-to-this-page.md
rename to docs/eCookbook/demo-programs/intro-to-this-page.md
diff --git a/docs/eCookbook/menu-bar.md b/docs/eCookbook/demo-programs/menu-bar.md
similarity index 100%
rename from docs/eCookbook/menu-bar.md
rename to docs/eCookbook/demo-programs/menu-bar.md
diff --git a/docs/eCookbook/menus.md b/docs/eCookbook/demo-programs/menus.md
similarity index 100%
rename from docs/eCookbook/menus.md
rename to docs/eCookbook/demo-programs/menus.md
diff --git a/docs/eCookbook/multi-threaded-work.md b/docs/eCookbook/demo-programs/multi-threaded-work.md
similarity index 100%
rename from docs/eCookbook/multi-threaded-work.md
rename to docs/eCookbook/demo-programs/multi-threaded-work.md
diff --git a/docs/eCookbook/psgdemos-pip-installable-demo-programs.md b/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
similarity index 100%
rename from docs/eCookbook/psgdemos-pip-installable-demo-programs.md
rename to docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
diff --git a/docs/eCookbook/settings-file.md b/docs/eCookbook/demo-programs/settings-file.md
similarity index 100%
rename from docs/eCookbook/settings-file.md
rename to docs/eCookbook/demo-programs/settings-file.md
diff --git a/docs/eCookbook/simple-form.md b/docs/eCookbook/demo-programs/simple-form.md
similarity index 100%
rename from docs/eCookbook/simple-form.md
rename to docs/eCookbook/demo-programs/simple-form.md
diff --git a/docs/eCookbook/the-basic-pysimplegui-program.md b/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
similarity index 100%
rename from docs/eCookbook/the-basic-pysimplegui-program.md
rename to docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
diff --git a/docs/eCookbook/ti-datamath-ii-calculator.md b/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
similarity index 100%
rename from docs/eCookbook/ti-datamath-ii-calculator.md
rename to docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
diff --git a/docs/eCookbook/1-4-24-dice-game.md b/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
similarity index 100%
rename from docs/eCookbook/1-4-24-dice-game.md
rename to docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
diff --git a/docs/eCookbook/adventure-game-popup-windows-with-delayed-text.md b/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
similarity index 100%
rename from docs/eCookbook/adventure-game-popup-windows-with-delayed-text.md
rename to docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
diff --git a/docs/eCookbook/calculator.md b/docs/eCookbook/examples-for-reddit-posts/calculator.md
similarity index 100%
rename from docs/eCookbook/calculator.md
rename to docs/eCookbook/examples-for-reddit-posts/calculator.md
diff --git a/docs/eCookbook/change-slider-based-on-input.md b/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
similarity index 100%
rename from docs/eCookbook/change-slider-based-on-input.md
rename to docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
diff --git a/docs/eCookbook/choose-file-from-a-list.md b/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
similarity index 100%
rename from docs/eCookbook/choose-file-from-a-list.md
rename to docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
diff --git a/docs/eCookbook/coin-calculator.md b/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
similarity index 100%
rename from docs/eCookbook/coin-calculator.md
rename to docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
diff --git a/docs/eCookbook/countdown-timer.md b/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
similarity index 100%
rename from docs/eCookbook/countdown-timer.md
rename to docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
diff --git a/docs/eCookbook/counters-using-keyboard.md b/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
similarity index 100%
rename from docs/eCookbook/counters-using-keyboard.md
rename to docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
diff --git a/docs/eCookbook/dashboard-mockup-for-a-car.md b/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
similarity index 100%
rename from docs/eCookbook/dashboard-mockup-for-a-car.md
rename to docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
diff --git a/docs/eCookbook/distance-calculator.md b/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
similarity index 100%
rename from docs/eCookbook/distance-calculator.md
rename to docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
diff --git a/docs/eCookbook/fade-window.md b/docs/eCookbook/examples-for-reddit-posts/fade-window.md
similarity index 100%
rename from docs/eCookbook/fade-window.md
rename to docs/eCookbook/examples-for-reddit-posts/fade-window.md
diff --git a/docs/eCookbook/input-2-fields.md b/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
similarity index 100%
rename from docs/eCookbook/input-2-fields.md
rename to docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
diff --git a/docs/eCookbook/ipynb-to-py-converter.md b/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
similarity index 100%
rename from docs/eCookbook/ipynb-to-py-converter.md
rename to docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
diff --git a/docs/eCookbook/kilometer-to-mile-converter-for-reddit.md b/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
similarity index 100%
rename from docs/eCookbook/kilometer-to-mile-converter-for-reddit.md
rename to docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
diff --git a/docs/eCookbook/login.md b/docs/eCookbook/examples-for-reddit-posts/login.md
similarity index 100%
rename from docs/eCookbook/login.md
rename to docs/eCookbook/examples-for-reddit-posts/login.md
diff --git a/docs/eCookbook/machinerys-handbook.md b/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
similarity index 100%
rename from docs/eCookbook/machinerys-handbook.md
rename to docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
diff --git a/docs/eCookbook/maze-solution-finder.md b/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
similarity index 100%
rename from docs/eCookbook/maze-solution-finder.md
rename to docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
diff --git a/docs/eCookbook/multiple-entry-in-same-window.md b/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
similarity index 100%
rename from docs/eCookbook/multiple-entry-in-same-window.md
rename to docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
diff --git a/docs/eCookbook/navigating-focus.md b/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
similarity index 100%
rename from docs/eCookbook/navigating-focus.md
rename to docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
diff --git a/docs/eCookbook/password-entry.md b/docs/eCookbook/examples-for-reddit-posts/password-entry.md
similarity index 100%
rename from docs/eCookbook/password-entry.md
rename to docs/eCookbook/examples-for-reddit-posts/password-entry.md
diff --git a/docs/eCookbook/pi-temperature-control.md b/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
similarity index 100%
rename from docs/eCookbook/pi-temperature-control.md
rename to docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
diff --git a/docs/eCookbook/png-image-viewer.md b/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
similarity index 100%
rename from docs/eCookbook/png-image-viewer.md
rename to docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
diff --git a/docs/eCookbook/printing-to-a-gui-window.md b/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
similarity index 100%
rename from docs/eCookbook/printing-to-a-gui-window.md
rename to docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
diff --git a/docs/eCookbook/reddit-c-to-c-frontend.md b/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
similarity index 100%
rename from docs/eCookbook/reddit-c-to-c-frontend.md
rename to docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
diff --git a/docs/eCookbook/reddit-multiple-rows-option-menu.md b/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
similarity index 100%
rename from docs/eCookbook/reddit-multiple-rows-option-menu.md
rename to docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
diff --git a/docs/eCookbook/reddit-scraper.md b/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
similarity index 100%
rename from docs/eCookbook/reddit-scraper.md
rename to docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
diff --git a/docs/eCookbook/sales-commission-calculator.md b/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
similarity index 100%
rename from docs/eCookbook/sales-commission-calculator.md
rename to docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
diff --git a/docs/eCookbook/shopify-reddit-mockup.md b/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
similarity index 100%
rename from docs/eCookbook/shopify-reddit-mockup.md
rename to docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
diff --git a/docs/eCookbook/spectrophotometry-from-twitter.md b/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
similarity index 100%
rename from docs/eCookbook/spectrophotometry-from-twitter.md
rename to docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
diff --git a/docs/eCookbook/stats-the-update-periodically.md b/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
similarity index 100%
rename from docs/eCookbook/stats-the-update-periodically.md
rename to docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
diff --git a/docs/eCookbook/text-adventure.md b/docs/eCookbook/examples-for-reddit-posts/text-adventure.md
similarity index 100%
rename from docs/eCookbook/text-adventure.md
rename to docs/eCookbook/examples-for-reddit-posts/text-adventure.md
diff --git a/docs/eCookbook/tic-tac-toe.md b/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
similarity index 100%
rename from docs/eCookbook/tic-tac-toe.md
rename to docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
diff --git a/docs/eCookbook/ticket-reservation.md b/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
similarity index 100%
rename from docs/eCookbook/ticket-reservation.md
rename to docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
diff --git a/docs/eCookbook/visual-basic-mockup.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
similarity index 100%
rename from docs/eCookbook/visual-basic-mockup.md
rename to docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
diff --git a/docs/eCookbook/visual-basic-to-python.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
similarity index 100%
rename from docs/eCookbook/visual-basic-to-python.md
rename to docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
diff --git a/docs/eCookbook/battleship.md b/docs/eCookbook/games/battleship.md
similarity index 100%
rename from docs/eCookbook/battleship.md
rename to docs/eCookbook/games/battleship.md
diff --git a/docs/eCookbook/conways-game-of-life.md b/docs/eCookbook/games/conways-game-of-life.md
similarity index 100%
rename from docs/eCookbook/conways-game-of-life.md
rename to docs/eCookbook/games/conways-game-of-life.md
diff --git a/docs/eCookbook/dice-roller.md b/docs/eCookbook/games/dice-roller.md
similarity index 100%
rename from docs/eCookbook/dice-roller.md
rename to docs/eCookbook/games/dice-roller.md
diff --git a/docs/eCookbook/minesweeper.md b/docs/eCookbook/games/minesweeper.md
similarity index 100%
rename from docs/eCookbook/minesweeper.md
rename to docs/eCookbook/games/minesweeper.md
diff --git a/docs/eCookbook/sudoku.md b/docs/eCookbook/games/sudoku.md
similarity index 100%
rename from docs/eCookbook/sudoku.md
rename to docs/eCookbook/games/sudoku.md
diff --git a/docs/eCookbook/uno-card-game.md b/docs/eCookbook/games/uno-card-game.md
similarity index 100%
rename from docs/eCookbook/uno-card-game.md
rename to docs/eCookbook/games/uno-card-game.md
diff --git a/docs/eCookbook/wordle.md b/docs/eCookbook/games/wordle.md
similarity index 100%
rename from docs/eCookbook/wordle.md
rename to docs/eCookbook/games/wordle.md
diff --git a/docs/eCookbook/animated-line-graph.md b/docs/eCookbook/graph-element/animated-line-graph.md
similarity index 100%
rename from docs/eCookbook/animated-line-graph.md
rename to docs/eCookbook/graph-element/animated-line-graph.md
diff --git a/docs/eCookbook/dashboard-mockup.md b/docs/eCookbook/graph-element/dashboard-mockup.md
similarity index 100%
rename from docs/eCookbook/dashboard-mockup.md
rename to docs/eCookbook/graph-element/dashboard-mockup.md
diff --git a/docs/eCookbook/fourier-animated-graph.md b/docs/eCookbook/graph-element/fourier-animated-graph.md
similarity index 100%
rename from docs/eCookbook/fourier-animated-graph.md
rename to docs/eCookbook/graph-element/fourier-animated-graph.md
diff --git a/docs/eCookbook/graph-element-bar-chart.md b/docs/eCookbook/graph-element/graph-element-bar-chart.md
similarity index 100%
rename from docs/eCookbook/graph-element-bar-chart.md
rename to docs/eCookbook/graph-element/graph-element-bar-chart.md
diff --git a/docs/eCookbook/graph-element-drag-a-square.md b/docs/eCookbook/graph-element/graph-element-drag-a-square.md
similarity index 100%
rename from docs/eCookbook/graph-element-drag-a-square.md
rename to docs/eCookbook/graph-element/graph-element-drag-a-square.md
diff --git a/docs/eCookbook/graph-element-drawing-and-dragging.md b/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
similarity index 100%
rename from docs/eCookbook/graph-element-drawing-and-dragging.md
rename to docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
diff --git a/docs/eCookbook/graph-element-line-graph-with-labels.md b/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
similarity index 100%
rename from docs/eCookbook/graph-element-line-graph-with-labels.md
rename to docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
diff --git a/docs/eCookbook/graph-element-sine-wave.md b/docs/eCookbook/graph-element/graph-element-sine-wave.md
similarity index 100%
rename from docs/eCookbook/graph-element-sine-wave.md
rename to docs/eCookbook/graph-element/graph-element-sine-wave.md
diff --git a/docs/eCookbook/utah-teapot.md b/docs/eCookbook/graph-element/utah-teapot.md
similarity index 100%
rename from docs/eCookbook/utah-teapot.md
rename to docs/eCookbook/graph-element/utah-teapot.md
diff --git a/docs/eCookbook/visualizing-sorts.md b/docs/eCookbook/graph-element/visualizing-sorts.md
similarity index 100%
rename from docs/eCookbook/visualizing-sorts.md
rename to docs/eCookbook/graph-element/visualizing-sorts.md
diff --git a/docs/eCookbook/centered-and-simple.md b/docs/eCookbook/layouts/centered-and-simple.md
similarity index 100%
rename from docs/eCookbook/centered-and-simple.md
rename to docs/eCookbook/layouts/centered-and-simple.md
diff --git a/docs/eCookbook/collapsible-sections.md b/docs/eCookbook/layouts/collapsible-sections.md
similarity index 100%
rename from docs/eCookbook/collapsible-sections.md
rename to docs/eCookbook/layouts/collapsible-sections.md
diff --git a/docs/eCookbook/fixed-size-columns-with-justification.md b/docs/eCookbook/layouts/fixed-size-columns-with-justification.md
similarity index 100%
rename from docs/eCookbook/fixed-size-columns-with-justification.md
rename to docs/eCookbook/layouts/fixed-size-columns-with-justification.md
diff --git a/docs/eCookbook/push-and-vpush-elements.md b/docs/eCookbook/layouts/push-and-vpush-elements.md
similarity index 100%
rename from docs/eCookbook/push-and-vpush-elements.md
rename to docs/eCookbook/layouts/push-and-vpush-elements.md
diff --git a/docs/eCookbook/swapping-window-layouts.md b/docs/eCookbook/layouts/swapping-window-layouts.md
similarity index 100%
rename from docs/eCookbook/swapping-window-layouts.md
rename to docs/eCookbook/layouts/swapping-window-layouts.md
diff --git a/docs/eCookbook/to-do-list-using-generated-layout.md b/docs/eCookbook/layouts/to-do-list-using-generated-layout.md
similarity index 100%
rename from docs/eCookbook/to-do-list-using-generated-layout.md
rename to docs/eCookbook/layouts/to-do-list-using-generated-layout.md
diff --git a/docs/eCookbook/animated-matplotlib-line-graph.md b/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
similarity index 100%
rename from docs/eCookbook/animated-matplotlib-line-graph.md
rename to docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
diff --git a/docs/eCookbook/matplotlib-plot-browser.md b/docs/eCookbook/matplotlib/matplotlib-plot-browser.md
similarity index 100%
rename from docs/eCookbook/matplotlib-plot-browser.md
rename to docs/eCookbook/matplotlib/matplotlib-plot-browser.md
diff --git a/docs/eCookbook/matplotlib-simple-plot.md b/docs/eCookbook/matplotlib/matplotlib-simple-plot.md
similarity index 100%
rename from docs/eCookbook/matplotlib-simple-plot.md
rename to docs/eCookbook/matplotlib/matplotlib-simple-plot.md
diff --git a/docs/eCookbook/matplotlib-single-plot.md b/docs/eCookbook/matplotlib/matplotlib-single-plot.md
similarity index 100%
rename from docs/eCookbook/matplotlib-single-plot.md
rename to docs/eCookbook/matplotlib/matplotlib-single-plot.md
diff --git a/docs/eCookbook/desktop-widget-launcher-bar.md b/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
similarity index 100%
rename from docs/eCookbook/desktop-widget-launcher-bar.md
rename to docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
diff --git a/docs/eCookbook/multi-threaded-long-task-simple.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
similarity index 100%
rename from docs/eCookbook/multi-threaded-long-task-simple.md
rename to docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
diff --git a/docs/eCookbook/multi-threaded-long-task-using-queue.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
similarity index 100%
rename from docs/eCookbook/multi-threaded-long-task-using-queue.md
rename to docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
diff --git a/docs/eCookbook/multi-threaded-multiple-workder-threads.md b/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
similarity index 100%
rename from docs/eCookbook/multi-threaded-multiple-workder-threads.md
rename to docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
diff --git a/docs/eCookbook/multi-threaded-write-event-value.md b/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
similarity index 100%
rename from docs/eCookbook/multi-threaded-write-event-value.md
rename to docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
diff --git a/docs/eCookbook/window-perform_long_operation-method.md b/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
similarity index 100%
rename from docs/eCookbook/window-perform_long_operation-method.md
rename to docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
diff --git a/docs/eCookbook/multiple-window-2-window-basic-design-pattern.md b/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
similarity index 100%
rename from docs/eCookbook/multiple-window-2-window-basic-design-pattern.md
rename to docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
diff --git a/docs/eCookbook/read-all-windows.md b/docs/eCookbook/multiple-windows/read-all-windows.md
similarity index 100%
rename from docs/eCookbook/read-all-windows.md
rename to docs/eCookbook/multiple-windows/read-all-windows.md
diff --git a/docs/eCookbook/two-windows-with-re-open.md b/docs/eCookbook/multiple-windows/two-windows-with-re-open.md
similarity index 100%
rename from docs/eCookbook/two-windows-with-re-open.md
rename to docs/eCookbook/multiple-windows/two-windows-with-re-open.md
diff --git a/docs/eCookbook/quiz-example-from-geekforgeeks.md b/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
similarity index 100%
rename from docs/eCookbook/quiz-example-from-geekforgeeks.md
rename to docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
diff --git a/docs/eCookbook/mono-spaced-fonts.md b/docs/eCookbook/tables/mono-spaced-fonts.md
similarity index 100%
rename from docs/eCookbook/mono-spaced-fonts.md
rename to docs/eCookbook/tables/mono-spaced-fonts.md
diff --git a/docs/eCookbook/navigate-using-arrow-keys-sort-by-column.md b/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
similarity index 100%
rename from docs/eCookbook/navigate-using-arrow-keys-sort-by-column.md
rename to docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
diff --git a/docs/eCookbook/simulated-tables.md b/docs/eCookbook/tables/simulated-tables.md
similarity index 100%
rename from docs/eCookbook/simulated-tables.md
rename to docs/eCookbook/tables/simulated-tables.md
diff --git a/docs/eCookbook/table-element-getting-click-events.md b/docs/eCookbook/tables/table-element-getting-click-events.md
similarity index 100%
rename from docs/eCookbook/table-element-getting-click-events.md
rename to docs/eCookbook/tables/table-element-getting-click-events.md
diff --git a/docs/eCookbook/the-table-element.md b/docs/eCookbook/tables/the-table-element.md
similarity index 100%
rename from docs/eCookbook/the-table-element.md
rename to docs/eCookbook/tables/the-table-element.md
diff --git a/docs/eCookbook/multiline-text-output-with-multiple-colors.md b/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
similarity index 100%
rename from docs/eCookbook/multiline-text-output-with-multiple-colors.md
rename to docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
diff --git a/docs/eCookbook/udemy-course.md b/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
similarity index 100%
rename from docs/eCookbook/udemy-course.md
rename to docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
diff --git a/docs/eCookbook/ini-files.md b/docs/eCookbook/user-settings/ini-files.md
similarity index 100%
rename from docs/eCookbook/ini-files.md
rename to docs/eCookbook/user-settings/ini-files.md
diff --git a/docs/eCookbook/usersettings-as-a-simple-database.md b/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
similarity index 100%
rename from docs/eCookbook/usersettings-as-a-simple-database.md
rename to docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
diff --git a/docs/eCookbook/language-selection.md b/docs/eCookbook/user-submitted-examples/language-selection.md
similarity index 100%
rename from docs/eCookbook/language-selection.md
rename to docs/eCookbook/user-submitted-examples/language-selection.md
diff --git a/docs/eCookbook/base64-button-graphics.md b/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
similarity index 100%
rename from docs/eCookbook/base64-button-graphics.md
rename to docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
diff --git a/docs/eCookbook/color-chooser-window.md b/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
similarity index 100%
rename from docs/eCookbook/color-chooser-window.md
rename to docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
diff --git a/docs/eCookbook/fade-in-fade-out-notification-windows.md b/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
similarity index 100%
rename from docs/eCookbook/fade-in-fade-out-notification-windows.md
rename to docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
From 71d3885cea9c2199db20f0e36227fa2d35601ba9 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 3 Jul 2022 09:44:08 -0400
Subject: [PATCH 093/467] Remove the eCookbook test.... a much better way
coming soon....
---
...uting-custom-events-through-window-read.md | 8 --
docs/eCookbook/animation/animated-gifs.md | 20 ----
.../desktop-timer-widget.md | 1 -
.../custom-checkboxes.md | 20 ----
.../custom-radio-buttons.md | 11 --
.../toggle-button-super-simple.md | 26 -----
.../toggle-buttons.md | 22 ----
.../custom-menubars.md | 13 ---
.../custom-titlebars.md | 107 ------------------
.../demo-programs/all-elements-simple-view.md | 40 -------
.../chat-instant-message-front-end.md | 14 ---
docs/eCookbook/demo-programs/control-panel.md | 13 ---
.../design-pattern-1-the-one-shot.md | 32 ------
...attern-2-persistent-window-with-updates.md | 20 ----
.../demo-programs/informe-os-dados.md | 51 ---------
.../demo-programs/intro-to-this-page.md | 65 -----------
docs/eCookbook/demo-programs/menu-bar.md | 15 ---
docs/eCookbook/demo-programs/menus.md | 24 ----
.../demo-programs/multi-threaded-work.md | 29 -----
.../psgdemos-pip-installable-demo-programs.md | 22 ----
docs/eCookbook/demo-programs/settings-file.md | 22 ----
docs/eCookbook/demo-programs/simple-form.md | 12 --
.../the-basic-pysimplegui-program.md | 49 --------
.../ti-datamath-ii-calculator.md | 12 --
.../1-4-24-dice-game.md | 21 ----
...re-game-popup-windows-with-delayed-text.md | 15 ---
.../examples-for-reddit-posts/calculator.md | 24 ----
.../change-slider-based-on-input.md | 9 --
.../choose-file-from-a-list.md | 8 --
.../coin-calculator.md | 19 ----
.../countdown-timer.md | 11 --
.../counters-using-keyboard.md | 6 -
.../dashboard-mockup-for-a-car.md | 12 --
.../distance-calculator.md | 8 --
.../examples-for-reddit-posts/fade-window.md | 9 --
.../input-2-fields.md | 8 --
.../ipynb-to-py-converter.md | 15 ---
.../kilometer-to-mile-converter-for-reddit.md | 20 ----
.../examples-for-reddit-posts/login.md | 7 --
.../machinerys-handbook.md | 18 ---
.../maze-solution-finder.md | 21 ----
.../multiple-entry-in-same-window.md | 15 ---
.../navigating-focus.md | 13 ---
.../password-entry.md | 6 -
.../pi-temperature-control.md | 21 ----
.../png-image-viewer.md | 8 --
.../printing-to-a-gui-window.md | 18 ---
.../reddit-c-to-c-frontend.md | 8 --
.../reddit-multiple-rows-option-menu.md | 4 -
.../reddit-scraper.md | 21 ----
.../sales-commission-calculator.md | 12 --
.../shopify-reddit-mockup.md | 23 ----
.../spectrophotometry-from-twitter.md | 16 ---
.../stats-the-update-periodically.md | 6 -
.../text-adventure.md | 16 ---
.../examples-for-reddit-posts/tic-tac-toe.md | 37 ------
.../ticket-reservation.md | 22 ----
.../visual-basic-mockup.md | 24 ----
.../visual-basic-to-python.md | 16 ---
docs/eCookbook/games/battleship.md | 34 ------
docs/eCookbook/games/conways-game-of-life.md | 14 ---
docs/eCookbook/games/dice-roller.md | 16 ---
docs/eCookbook/games/minesweeper.md | 33 ------
docs/eCookbook/games/sudoku.md | 44 -------
docs/eCookbook/games/uno-card-game.md | 12 --
docs/eCookbook/games/wordle.md | 8 --
.../graph-element/animated-line-graph.md | 1 -
.../graph-element/dashboard-mockup.md | 18 ---
.../graph-element/fourier-animated-graph.md | 16 ---
.../graph-element/graph-element-bar-chart.md | 51 ---------
.../graph-element-drag-a-square.md | 19 ----
.../graph-element-drawing-and-dragging.md | 15 ---
.../graph-element-line-graph-with-labels.md | 9 --
.../graph-element/graph-element-sine-wave.md | 8 --
docs/eCookbook/graph-element/utah-teapot.md | 18 ---
.../graph-element/visualizing-sorts.md | 11 --
docs/eCookbook/layouts/centered-and-simple.md | 14 ---
.../eCookbook/layouts/collapsible-sections.md | 13 ---
.../fixed-size-columns-with-justification.md | 27 -----
.../layouts/push-and-vpush-elements.md | 14 ---
.../layouts/swapping-window-layouts.md | 10 --
.../to-do-list-using-generated-layout.md | 45 --------
.../animated-matplotlib-line-graph.md | 1 -
.../matplotlib/matplotlib-plot-browser.md | 17 ---
.../matplotlib/matplotlib-simple-plot.md | 20 ----
.../matplotlib/matplotlib-single-plot.md | 20 ----
.../desktop-widget-launcher-bar.md | 41 -------
.../multi-threaded-long-task-simple.md | 8 --
.../multi-threaded-long-task-using-queue.md | 10 --
...multi-threaded-multiple-workder-threads.md | 8 --
.../multi-threaded-write-event-value.md | 39 -------
.../window-perform_long_operation-method.md | 37 ------
...le-window-2-window-basic-design-pattern.md | 4 -
.../multiple-windows/read-all-windows.md | 12 --
.../two-windows-with-re-open.md | 13 ---
.../quiz-example-from-geekforgeeks.md | 33 ------
docs/eCookbook/tables/mono-spaced-fonts.md | 27 -----
...avigate-using-arrow-keys-sort-by-column.md | 15 ---
docs/eCookbook/tables/simulated-tables.md | 16 ---
.../table-element-getting-click-events.md | 16 ---
docs/eCookbook/tables/the-table-element.md | 9 --
...tiline-text-output-with-multiple-colors.md | 6 -
.../udemy-course.md | 21 ----
docs/eCookbook/user-settings/ini-files.md | 24 ----
.../usersettings-as-a-simple-database.md | 8 --
.../language-selection.md | 8 --
.../base64-button-graphics.md | 16 ---
.../color-chooser-window.md | 33 ------
.../fade-in-fade-out-notification-windows.md | 15 ---
109 files changed, 2092 deletions(-)
delete mode 100644 docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
delete mode 100644 docs/eCookbook/animation/animated-gifs.md
delete mode 100644 docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
delete mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
delete mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
delete mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
delete mode 100644 docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
delete mode 100644 docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
delete mode 100644 docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
delete mode 100644 docs/eCookbook/demo-programs/all-elements-simple-view.md
delete mode 100644 docs/eCookbook/demo-programs/chat-instant-message-front-end.md
delete mode 100644 docs/eCookbook/demo-programs/control-panel.md
delete mode 100644 docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
delete mode 100644 docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
delete mode 100644 docs/eCookbook/demo-programs/informe-os-dados.md
delete mode 100644 docs/eCookbook/demo-programs/intro-to-this-page.md
delete mode 100644 docs/eCookbook/demo-programs/menu-bar.md
delete mode 100644 docs/eCookbook/demo-programs/menus.md
delete mode 100644 docs/eCookbook/demo-programs/multi-threaded-work.md
delete mode 100644 docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
delete mode 100644 docs/eCookbook/demo-programs/settings-file.md
delete mode 100644 docs/eCookbook/demo-programs/simple-form.md
delete mode 100644 docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
delete mode 100644 docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/calculator.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/fade-window.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/login.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/password-entry.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/text-adventure.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
delete mode 100644 docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
delete mode 100644 docs/eCookbook/games/battleship.md
delete mode 100644 docs/eCookbook/games/conways-game-of-life.md
delete mode 100644 docs/eCookbook/games/dice-roller.md
delete mode 100644 docs/eCookbook/games/minesweeper.md
delete mode 100644 docs/eCookbook/games/sudoku.md
delete mode 100644 docs/eCookbook/games/uno-card-game.md
delete mode 100644 docs/eCookbook/games/wordle.md
delete mode 100644 docs/eCookbook/graph-element/animated-line-graph.md
delete mode 100644 docs/eCookbook/graph-element/dashboard-mockup.md
delete mode 100644 docs/eCookbook/graph-element/fourier-animated-graph.md
delete mode 100644 docs/eCookbook/graph-element/graph-element-bar-chart.md
delete mode 100644 docs/eCookbook/graph-element/graph-element-drag-a-square.md
delete mode 100644 docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
delete mode 100644 docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
delete mode 100644 docs/eCookbook/graph-element/graph-element-sine-wave.md
delete mode 100644 docs/eCookbook/graph-element/utah-teapot.md
delete mode 100644 docs/eCookbook/graph-element/visualizing-sorts.md
delete mode 100644 docs/eCookbook/layouts/centered-and-simple.md
delete mode 100644 docs/eCookbook/layouts/collapsible-sections.md
delete mode 100644 docs/eCookbook/layouts/fixed-size-columns-with-justification.md
delete mode 100644 docs/eCookbook/layouts/push-and-vpush-elements.md
delete mode 100644 docs/eCookbook/layouts/swapping-window-layouts.md
delete mode 100644 docs/eCookbook/layouts/to-do-list-using-generated-layout.md
delete mode 100644 docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
delete mode 100644 docs/eCookbook/matplotlib/matplotlib-plot-browser.md
delete mode 100644 docs/eCookbook/matplotlib/matplotlib-simple-plot.md
delete mode 100644 docs/eCookbook/matplotlib/matplotlib-single-plot.md
delete mode 100644 docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
delete mode 100644 docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
delete mode 100644 docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
delete mode 100644 docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
delete mode 100644 docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
delete mode 100644 docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
delete mode 100644 docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
delete mode 100644 docs/eCookbook/multiple-windows/read-all-windows.md
delete mode 100644 docs/eCookbook/multiple-windows/two-windows-with-re-open.md
delete mode 100644 docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
delete mode 100644 docs/eCookbook/tables/mono-spaced-fonts.md
delete mode 100644 docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
delete mode 100644 docs/eCookbook/tables/simulated-tables.md
delete mode 100644 docs/eCookbook/tables/table-element-getting-click-events.md
delete mode 100644 docs/eCookbook/tables/the-table-element.md
delete mode 100644 docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
delete mode 100644 docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
delete mode 100644 docs/eCookbook/user-settings/ini-files.md
delete mode 100644 docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
delete mode 100644 docs/eCookbook/user-submitted-examples/language-selection.md
delete mode 100644 docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
delete mode 100644 docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
delete mode 100644 docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
diff --git a/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md b/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
deleted file mode 100644
index 9c7370fa..00000000
--- a/docs/eCookbook/advanced/focus-events-routing-custom-events-through-window-read.md
+++ /dev/null
@@ -1,8 +0,0 @@
-This example shows how you can use a new capability in PySimpleGUI.... the ability to create custom events that will be returned to you through your call to `window.read()`.
-
-In this case, the desired events are when a window receives and loses focus. This is an advanced capability that most applications don't need, but it's nice to know it's available should you need it.
-
-The same kind of constructions can be used to bind right clicks to buttons for example.
-
-
-
diff --git a/docs/eCookbook/animation/animated-gifs.md b/docs/eCookbook/animation/animated-gifs.md
deleted file mode 100644
index a85dac2e..00000000
--- a/docs/eCookbook/animation/animated-gifs.md
+++ /dev/null
@@ -1,20 +0,0 @@
-**Animated GIFs**
-
-Animated GIFs are shown by repeatedly calling a PySimpleGUI function or method on a frequent basis.
-
-***A critical fact to understand ***is that you must make a call for every frame you wish to show. These functions are not **ones** that automatically playback and entire GIF on your behalf. You must make a call for every frame to be displayed.
-
-The timing of the calls is not important for your application to keep track of. PySimpleGUI will figure out if enough time has elapsed for the next frame to be shown. In other words, your application does not have to accurately measure the time between frames and perform delays.
-
-Instead of the application keeping track of the time, PySimpleGUI keeps track of how much time has elapsed since the last frame was shown. If enough time has elapsed that another frame should be shown, then the next frame will be shown. It not enough time has passed, then nothing about the image is changed. The last frame shown will remain the one showing.
-
-
-This program will shows animations using 2 different methods.
-1. By calling `popup_animated`
-2. By calling `Image.update_animation`
-
-In both cases, a loop is involved.
-
-The first animation played uses `popup_animated`. You cannot interrupt this particular animation. It plays until complete. The remaining animations can be clicked in order to advance to the next animation. When the last GIF is reached, clicking it will do nothing. It will play forever.
-
-
diff --git a/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md b/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
deleted file mode 100644
index 60a508b6..00000000
--- a/docs/eCookbook/async-windows-read-with-a-timeout/desktop-timer-widget.md
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
deleted file mode 100644
index 0da1f2b7..00000000
--- a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-checkboxes.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## Custom Checkboxes
-
-A common complaint I've heard from Python programmers are how dated the GUI look. With PySimpleGUI this is a problem that's easy to overcome. It's trivial in fact.
-
-In this very short example, you'll see how making checkboxes look any way you want them to look by using Base64 encoded PNG images. There is a PySimpleGUI utility that makes the job even easier! `pip install psgresizer`to get the psgresizer tool that I used to create these checkboxes. This tool will encode an image into a Base64 encoded bytestring that is placed on the clipboard, ready for you to paste into your code. It will take you under 5 minutes, if that, to have checkboxes of any style you want.
-
-### `psgresizer`
-
-This is a screenshot of the psgresizer tool that you can pip install and run from the command line.
-
-
-
-The program is quite small that demonstrates the custom checkboxes. Instead of specifying a `Checkbox` element as you would normally, you use an `Image` element. Setting the `enable_events` parameter will cause an event to be generated when the user clicks the checkbox. You can then change the image shown in your event loop when you detect the checkbox has been clicked.
-
-This is how this Custom Checkbox program appears when running on Windows.
-
-
-
-
-
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
deleted file mode 100644
index 606dc648..00000000
--- a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/custom-radio-buttons.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## Custom Radio Buttons
-
-Getting a GUI that's attractive isn't impossible using PySimpleGUI. tkinter catches a lot of "ugly" comments. It doesn't HAVE To be though. PySimpleGUI makes creating your own custom controls ***trivial***.
-
-There are a number of ways to go about something like this. I've chosen a simple approach of using an Image Element and a Text Element.
-
-The Image Elements are used to create a simple graphic that represents the state of the radio button. The images are included in the code as base64 encoded graphics. Because they are based on PNG files, they have an alpha channel and will blend with whatever kind of background you place them on. They are either on or off.
-
-Both the Image Element and the Text Element next to it have the events enabled on those elements. This will create an event if either of them are clicked, which mirrors the behavior of a Radio Button. The "State" of the button is simply stored as Metadata in the Image Element.
-
-
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
deleted file mode 100644
index 7563af17..00000000
--- a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-button-super-simple.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## Toggle Button - Super Simple
-
-This demo shows you how to make a toggle button using 2 methods.
-
-1. A Button that changes color and text
-2. A Button with a graphic that changes
-
-
-It's a simple way to get a toggle button in PySimpleGUI using the Button Element.
-
-
-
-## Toggle Button - Super Simple Graphic Only
-
-And this one is even more simplified.
-
-
-
-
-
-## Toggle Button - Simple Graphic - No Button Animation
-
-Maybe you don't want the graphic to move up and down like a button does. Not a problem....just switch from Button to Image.
-
-
-
diff --git a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md b/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
deleted file mode 100644
index d156609e..00000000
--- a/docs/eCookbook/custom-elements-buttons-radio-buttons-etc/toggle-buttons.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Toggle Buttons with Disable
-
-This example shows a 4-state toggle button.
-
-Normally a toggle button has 2 states:
-1. On
-2. Off
-
-Buttons can also be disabled. When using PySimpleGUI to disable buttons, it will use the underlying GUI Framework's disable which usually adds a gray overlay or change the text to gray.
-
-In the 4.35.0 release of PySimpleGUI, a new button state was added.... an "ignore". This state means that the button will not generate events. Unlike disable, ignore does not use the GUI framework's disable capability, thus it will not change the color.
-
-This example program has these 4 states for the toggle button:
-1. On
-2. Off
-3. On and disabled
-4. Off and disabled
-
-Disabled in this specific situation means ignore. The program itself is making the button appear to be disabled.
-
-
-
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
deleted file mode 100644
index 5c83c854..00000000
--- a/docs/eCookbook/custom-title-and-menu-bars/custom-menubars.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## MenubarCustom
-
-These are automatically paired with the custom titlebars, but you can also use them with normal titlebar.
-
-Here on Trinket, all Titlebars are custom and thus all menubars are also custom
-
-This Trinket program is also shown in the other Demo Programs page marked CustomTitlebars.
-
-
-
-
-
-
diff --git a/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md b/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
deleted file mode 100644
index 2132e338..00000000
--- a/docs/eCookbook/custom-title-and-menu-bars/custom-titlebars.md
+++ /dev/null
@@ -1,107 +0,0 @@
-## Custom Titlebars & Custom Menubars - Bringing Some Style to Windows
-
-One problem with running on Trinket is the lack of titlebars. Titlebars and Menubars are provided by the OS. Like all things software, it's a wonferfully terrible thing.
-
-Wonderful that they just work. Terrible that the colors are not changable.
-
-As Trinket has become a more and more important tool in the edcuation of PySimpleGUI programmers, the lack of a Titlebar wsa becoming a serious problem. Additionally, that aforementioned lack of color and other controls means your wonderful dark themed PySimpleGUI window is likely to have an entirely non-matching titlebar.
-
-Let's look at both the default PySimpleGUI theme and a "Dark Red" theme.
-
-```python
-import PySimpleGUI as sg
-
-sg.theme('dark red')
-
-layout = [ [sg.Text('My Window')],
- [sg.Input(key='-IN-')],
- [sg.Button('Go'), sg.Button('Exit')] ]
-
-sg.Window('Window Title', layout).read(close=True)
-
-```
-
-If no theme is set for the window, we get this lovely window
-
-
-
-Setting "Dark Red" produces this one
-
-
-
-
-They're not terrible by ANY stretch, espcecially given they're all of 4 lines long. But, they can certainly be made a bit more attractive and this is where the custom titlebar comes in. Not only does it solve a problem of a missting titlebar entirely on Trinket, but it also gives us very attractive windows on all platforms
-
-By adding the parameter `use_custom_titlebar=True`....
-
-```python
-sg.Window('Window Title', layout, use_custom_titlebar=True).read(close=True)
-
-```
-
-Our windows become these on Windows
-
-
-
-
-
-
------------------------------
-
-## What About That "Trinket Problem"?
-
-As mentioned at the of this page, this custom titlebar journey bagan with a problem happening here on Trinket. Because there was no titlebar, ***always***, it meant our nice, simple window:
-
-```python
-import PySimpleGUI as sg
-
-sg.theme('dark red')
-
-layout = [ [sg.Text('My Window')],
- [sg.Input(key='-IN-')],
- [sg.Button('Go'), sg.Button('Exit')] ]
-
-sg.Window('Window Title', layout).read(close=True)
-
-```
-
-Always appeared like this on Trinket:
-
-
-
-That's not at all what Windows and Linux user experience. Not only was this a confusing situation, it was problematic should you want to move the window. There's no titlebar to grab and move the window.
-
-It's enough to drive a PySimpleGUI user crazy!
-
-
-
-
-## Custom Titlebar to the Rescue
-
-2021 was kicked off with release 4.33.0 on Jan 2, 2021. This is when the Custom Titlebar was released as part of PySimpleGUI. When PySimpleGUI detects that the program is running on Trinket, then a custom titlebar is added on your behalf, no additional code needed!
-
-Now your program above, the simple one, results in this window:
-
-
-
-
-
-Don't believe it? Let's give it a go and see how things work. Go ahead... poke the run button.
-
-
-
-You can modify this Trinket and you'll find that the Titlebar colors match your theme's colors (of course....).
-
--------------------------------
-
-## Custom Menubars to Match
-
-Custom Menubars are now part of PySimpleGUI. You can get the effect of a Menubar that is styled in a way that matches your theme, by using using the MenubarCustom element.
-
-Like Custom Titlebars, it was initially released as a Demo Program. You can run this demo on Trinket here:
-
-
-
-
-
-
diff --git a/docs/eCookbook/demo-programs/all-elements-simple-view.md b/docs/eCookbook/demo-programs/all-elements-simple-view.md
deleted file mode 100644
index 76e7e1d4..00000000
--- a/docs/eCookbook/demo-programs/all-elements-simple-view.md
+++ /dev/null
@@ -1,40 +0,0 @@
-## All Elements - Listed in 1 Window
-
-This program is a slightly modified version of the Demo Program found in the PySimpleGUI repo:
-
-`Demo_All_Elements_Simple.py`
-
-
-The view of this window here on Trinket looks a little different than the code when run on Windows
-
-### Trinket
-
-
-
-
-### Windows 10
-
-
-
-### Titlebar and Menubar
-
-The thing I want to draw your attention to is the Titlebar and the Menubar.
-
-Because Trinket does not provide a Titlebar (it's the operating system's job to do this), PySimpleGUI provides one for you automatically. PySimpleGUI doesn't automatically switch your Menubar to a MenubarCustom which is what you need to use on Trinket for the 2 to match. The code in this Trinket has been modified to add the custom Menubar for you.
-
-
-### The code
-
-This demo was written to show you the "pallet of elements" that you have available to paint your GUI window with. It doesn't tell the full story however as you can expand these GREATLY by using PIL, the graph element, images for buttons, etc. What it does do is list all of the elements using 1 line of code per element. It can't get much simpler than that.
-
-
-### Theme Previewer
-
-This proram has a secondary function... you can see what all of the elements look like using the many PySimpleGUI Themes. Choose a new theme from the Combo element shown and the window will be remade with the new theme.
-
-For example, I chose the "Dark Grey 11" theme and was shown this window:
-
-
-
-
-
diff --git a/docs/eCookbook/demo-programs/chat-instant-message-front-end.md b/docs/eCookbook/demo-programs/chat-instant-message-front-end.md
deleted file mode 100644
index 6f6d0358..00000000
--- a/docs/eCookbook/demo-programs/chat-instant-message-front-end.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Simple Chat program front end
-
-This demo was kept short and simple as to provide a foundation for something more elaborate (or not). Didn't want to make it so that you have to remove more code than you add.
-
-This program takes input from the user and uses print statements to output information to the window.
-
-A couple of features may not be what you're looking for and are easy to change are:
-* Enter key "sends" the message
-* After every send the input element is cleared
-
-This chat program is synchronous in its design. It gathers input, "sends" it or processes it in some manner and then outputs the results. If you need is more asynchronous, then you'll want to use a PySimpleGUI async design pattern instead of this more simple synchronous one.
-
-
-
diff --git a/docs/eCookbook/demo-programs/control-panel.md b/docs/eCookbook/demo-programs/control-panel.md
deleted file mode 100644
index 0cbce8b9..00000000
--- a/docs/eCookbook/demo-programs/control-panel.md
+++ /dev/null
@@ -1,13 +0,0 @@
-**Control Panel**
-
-Creates a grid of images with text labels that looks like a typical "control panel".
-
-Note that there is currently a bug with the `Column` Element where the mousewheel only scrolls the Column if mouse is directrly over the scrollwheel.
-
-This code contains a lot of Base64 Images in order to avoid needing to distributes a lot of individual image files with the code. This way a single source file has everything required.
-
-On Windows the window looks like this:
-
-
-
-
diff --git a/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md b/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
deleted file mode 100644
index 9c5cb035..00000000
--- a/docs/eCookbook/demo-programs/design-pattern-1-the-one-shot.md
+++ /dev/null
@@ -1,32 +0,0 @@
-**Design Pattern 1 - The One-Shot
-**
-Use this design pattern to show a window, get some input values and then close the window. The window is not meant to stick around for very long.
-
-
-
-
-An exciting development in 2019 was the addition of the `close` parameter to the `window.read()` call. This enables you to write single line GUIs (again), a capability that was around in the early days of PySimpleGUI but disappeared as persistent windows became the primary use.
-
-To make a single line, one-shot-GUI, you combine the layout into the call to `Window` itself. You also "chain" the call to read onto the end of your `Window` call.
-
-The result is a line that looks like this:
-```python
-event, values = sg.Window('My single-line GUI!',
- [[sg.Text('My one-shot window.')],
- [sg.InputText(key='-IN-')],
- [sg.Submit(), sg.Cancel()]]).read(close=True)
-```
-
-
-
-
-
-
-You can take this approach one step further and parse out the input value directly into your variable by adding more code onto the end of the line. In this case, a subscript to pick up the second location in the tuple that's returned from `read` and then the key.
-
-```python
-event, values = sg.Window('My single-line GUI!',
- [[sg.Text('My one-shot window.')],
- [sg.InputText(key='-IN-')],
- [sg.Submit(), sg.Cancel()]]).read(close=True)[1]['-IN-']
-```
diff --git a/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md b/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
deleted file mode 100644
index afbb26c2..00000000
--- a/docs/eCookbook/demo-programs/design-pattern-2-persistent-window-with-updates.md
+++ /dev/null
@@ -1,20 +0,0 @@
-**Design Pattern 2 - Persistent Windows, output updates in window**
-
-
-***This is the most common design pattern you'll find in PySimpleGUI. ***
-
-It's the same across all of the ports of PySimpleGUI. You'll easily be able to recognize a PySimpleGUI program by this basic structure.
-
-This pattern is for windows that remain open with the user interacting with them. It's a "normal" window from a user's standpoint.
-
-*This pattern has 4 parts:*
-
-1. Layout definition
-2. Window creation
-3. Event loop - read window events and inputs
-4. Window close
-
-Each of these parts is 1 or 2 lines of Python code when working with a basic window. The size of the event loop depends on the amount of processing you need to do when events happen in the window.
-
-
-
diff --git a/docs/eCookbook/demo-programs/informe-os-dados.md b/docs/eCookbook/demo-programs/informe-os-dados.md
deleted file mode 100644
index e09bcdbf..00000000
--- a/docs/eCookbook/demo-programs/informe-os-dados.md
+++ /dev/null
@@ -1,51 +0,0 @@
-
-It's sometimes useful to exlore what it would take to duplicate a GUI written in tkinter, especially when a nicely written article accompanies the code.
-
-This GUI code duplicates a portion of the tkinter code posted on this page:
-https://www.devmedia.com.br/tkinter-interfaces-graficas-em-python/33956
-
-It performs performs the logic for only the "Inserir" button.
-
-To add the code for the remaining buttons, add `elif` statements onto the bottom of the `if` statement in the event loop. At the moment, buttons that are not handled in the event loop causes a "Not yet implemlented" message to be shown.
-
-On a Windows machine, the window this code produces looks like this:
-
-
-
-
-PySimpleGUI is a package that provides an interface to GUI Frameworks that uses constructs familiar to Python programmers of all experience levels. With PySimpleGUI you can run your source code on tkinter, Qt, WxPython and in a browser... on Windows, Mac and Linux
-
-
-
-
-One of the "neat tricks" that PySimpleGUI has is the ability to run on multiple GUI platforms with a minimal amount of changes to your code. Often it is just 1 line of code to change.
-
-You can't do this on Trinket, in your browser because Trinket only supports tkinter.
-
-For the example code above, running on a Windows machine, the import statement at the top was changed to use a version of PySimpleGUI that runs on Qt, WxPython and in the browser (using Remi). Note that the windows produced are not perfect and may need a font size or other change to make it look better, but the several character change using PySimpleGUI is tiny compared to what it would take to port tkinter code to Qt.
-
-Changed the import to run on PySide2 (Qt)
-```python
-import PySimpleGUIQt as sg
-```
-
-The code then created this window running on Qt
-
-
-
-Changed the import to run on WxPython
-```python
-import PySimpleGUIWx as sg
-```
-
-The code then created this window running on WxPython
-
-
-Changed the import to run in a browser:
-```python
-import PySimpleGUIWeb as sg
-```
-
-The code then created this window running in a chrome window
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/intro-to-this-page.md b/docs/eCookbook/demo-programs/intro-to-this-page.md
deleted file mode 100644
index cba024f6..00000000
--- a/docs/eCookbook/demo-programs/intro-to-this-page.md
+++ /dev/null
@@ -1,65 +0,0 @@
-
-# Welcome to the PySimpleGUI Interactive eCookbook
-
-SOME of these Trinkets are older, but all work.
-
-Use the navigation bar on the left to look through the pages. Each page has ***at least*** one demo program for you to RUN in your browser.
-
-With this eCookbook you don't need to do anything than **click run**. That's it. You can see the code that's running, modify it, and if you find it particulrly useful, copy it to your machine and use it in your project.
-
-## Example - The Basic PySimpleGUI Program
-
-Let's start with the most basic of PySimpleGUI programs so you know how they work.
-
-The code is on the left. Clicking run will show the GUI on the right side. The print output (stdout, stderr) are down in a window below the GUI. There are more controls, but that's enough to get you running. So, go ahead, **click RUN!**
-
-
-
-
-
-## The Regular (other) Cookbook
-
-You'll find the full PySimpleGUI Cookbook where it's always been located, on ReadTheDocs as a tab in the user documentation.
-
-http://Cookbook.PySimpleGUI.org
-
-## The Demo Programs
-
-There are over 300 .py .pyw files on the PySimpleGUI Repo that you can consider to be Cookbook Recipes. They show you how PySimpleGUI works and how to integrate PySimpleGUI with other packages. Ready to run bookbook recipes that are simple enough and commented enough that you don't need text.
-
-http://Demos.PySimpleGUI.org
-
-## The Full Documenation
-
-The Cookbook, primary doc, readme, call reference, etc, can always be found here:
-
-http://www.PySimpleGUI.org
-
-
-## Known (slight) Problems
-
-### Missing Titlebars
-
-Special code was added to PySimpleGUI to use a custom Titlebar when the program is running on Trinket. Not all Trinkets have this code added to them.
-
-You will notice with older versions of PySimpleGUI and Trinket that there is no titlebar on the window. That is because the titlebar is provided by the Operating System and Trinket doesn't really have one and thus the need for PySimpleGUI's custom code.
-
-### Smaller Screen Real Estate
-
-800 x 600 is the size of a standard Trinket screen that PySimpleGUI has to work with.
-
-That's quite small when you're trying to run Demo Programs from the PySimpleGUI project. Some won't fit. Most will though.
-
-You may need to use the full-screen mode for some examples. Information about full-screen is on this page in one of the first examples.
-
-## Consider Supporting Trinket
-
-Trinket is a **fantastic** platform for teaching PySimpleGUI. It's easy for students to use. It's easy for teachers to use. It doesn't require anyone to install anything anywhere. All that's needed is a browser. Coding from a tablet is difficult unless you have a keyboard, that's true for every coding site on the internet.
-
-I consider Trinket to be a partner. They've provided solid service to the PySimpleGUI community for several years. "It just works" is one of the most valuable traits for a product or service and PySimpleGUI "just works" on Trinket. Make a new PyGrame Trinket project, type `import PySimpleGUI as sg`, and you're ready to start having fun!
-
-The prices are riduculously low what we're all getting to experience - PySimpleGUI running in the browser with zero effort on your part.
-
-## Get on with learning!
-
-Start clicking topics on the left table of contents and have fun while learning PySimpleGUI.....
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/menu-bar.md b/docs/eCookbook/demo-programs/menu-bar.md
deleted file mode 100644
index deec57ac..00000000
--- a/docs/eCookbook/demo-programs/menu-bar.md
+++ /dev/null
@@ -1,15 +0,0 @@
-```python.run
-runnable code goes here
-```## Collapsible Sections
-
-Visible / Invisible settings on the plain tkinter based PySimpleGUI have been a real challenge. In release 4.28.0 a new function, `pin`, was added that will "pin" an element to a location in your layout. This will reserve the location for the element in the layout. Without it, the element will move when you make it inivisible and visible again.
-
-There is a 1-pixel "penalty" of sorts when using this capability. A single pixel is needed to reserve and hold this spot, a small price to pay given what you can do with this new capability.
-
-This demo shows how you can use this feature to make Column elements invisible as if a section of the window has been collapsed with the contents hidden.
-
-Here is how the demo looks running on Windows
-
-
-
-
diff --git a/docs/eCookbook/demo-programs/menus.md b/docs/eCookbook/demo-programs/menus.md
deleted file mode 100644
index af1a1558..00000000
--- a/docs/eCookbook/demo-programs/menus.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Menubar and Titlebar With Trinkets
-
-## Menus - MenubarCustom instead of Menu
-
-There's a tricky issue with Trinket. Trinket doesn't supply a titlebar by default. You may notice that many of the older examples here lack a titlebar. That's because it's only been in 2021 that a custom titlebar was developed and automatically added when the runtime enironment is Trinket.
-
-There's one issue with these Custom Titlebars.... you need a custom Menubar to go with them. -sigh-
-
-You'll find MenubarCustom is an element that works much like a normal Menu element.
-
-## Info from original Trinket made in 2019, but code updated in 2021:
-
-This demo shows you how you can add a menu bar to your program.
-You will receive events that are the menu item's text or the menu
-item's key.
-
-The main purpose of this demo is to teach you the layout of a menu definition.
-It is a basic Python list with listings inside that respresent the cascading
-of menus. You can go as deep as you with.
-
-Notice that the `ButtonMenu` Element is a little different. The MenuBar and right click menus both return the menu item chosen as the event. For the `ButtonMenu` Element the key of the button is returned. The menu item chosen is in the values variable. It's a 2-step process to get the menu item chosen for `ButtonMenu` elements.
-
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/demo-programs/multi-threaded-work.md b/docs/eCookbook/demo-programs/multi-threaded-work.md
deleted file mode 100644
index f3ae9698..00000000
--- a/docs/eCookbook/demo-programs/multi-threaded-work.md
+++ /dev/null
@@ -1,29 +0,0 @@
-**Multi-Threaded Work - Running long tasks inside of a GUI**
-
-This program demonstrates one way of using a combination of Python's Thread
-and Queue objects to implement a GUI that performs work that takes too long
-to directly perform inside of the event loop.
-
-An example use would be if you have a button that you want to use to start
-some code that will take several seconds to run, then this technique is a
-good pattern to use.
-
-Take a moment to examine the code dealing with the Thread and the Queue. These
-constructs are nothing to fear as the amount of code that uses them is only a
-handul of lines of code are needed. And they are simple enough that you'll
-be able to understand them.
-
-***"Thread-safe"*** - This is an important term to consider any time you are using threads in your program. There are 2 things to check out:
-1. You must make sure that the calls you make from your thread are OK to call from a thread
-2. If you are running multiple threads, then the calls you make must be "thread-safe"
-
-The authors of libraries you are using often tell you if their code is "thread-safe".
-
-PySimpleGUI code is not thread safe. For the tkinter version (i.e. plain PySimpleGUI versus PySimpleGUIQt), you cannot run PySimpleGUI as a thread. To put that in simpler terms, you cannot make any calls into the PySimpleGUI package from a thread. For example, you cannot call `update` for any of your elements from a thread. This is why you see the updates happening from the main thread only.
-
-Screenshot:
-
-
-
-
-
diff --git a/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md b/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
deleted file mode 100644
index 5806a5ee..00000000
--- a/docs/eCookbook/demo-programs/psgdemos-pip-installable-demo-programs.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Demo Programs
-
-The [Demo Progams](http://Demos.PySimpleGUI.org) were the basis for many of the Trinkets you see on this page. There are over 300 of them to help give you a fast jump start on building your application, or they will teach you how to perform various operations.
-
-If you want to learn how an element works, see example code, then check out the Demo Programs.
-
-In 2022 a new PySimpleGUI application, `psgdemos`, was released to [PyPI](https://pypi.org/project/psgdemos/). All you need to do is:
-
-`python -m pip install psgdemos`
-`psgdemos`
-
-(Use `python3` if you're on Linux or Mac)
-
-The command `psgdemos` will launch the Demo Browser, your gateway to Demo Program fun. The Demo Browser enables you to easily **search**, **run**, and **edit** the programs.
-
-For example, if you want to learn more about using the `Graph` element, then use the Demo Browser to search for Demo Programs that use that element:
-
-
-
-You can learn more about the Demo Browser and installing Demo Programs in the Cookbook, in the [Recipe on Demo Browser](https://pysimplegui.readthedocs.io/en/latest/cookbook/#recipe-the-demo-browser)
-
-It's by far the easiest way to navigate the many examples available for you use.
diff --git a/docs/eCookbook/demo-programs/settings-file.md b/docs/eCookbook/demo-programs/settings-file.md
deleted file mode 100644
index 034eb028..00000000
--- a/docs/eCookbook/demo-programs/settings-file.md
+++ /dev/null
@@ -1,22 +0,0 @@
-### Settings File - Load & Save Programming Settings
-
-This demo program shows one way to save your program's settings using a JSON file as your settings file. This code is particularly handy when you are building desktop-widgets like a Rainmater type of desktop widget.
-
-The main program in the example is very small. The focus is on the settings window.
-
-
-
-This is the settings window.
-
-
-
-Now you can easily add settings to your programs that are saved to disk, a very nice touch that adds a lot of polish to your programs.
-
-
-
-### Config.ini format
-
-In version 4.49.0.10 support for .INI format files was added. This is a quick example of how to use INI files with PySimpleGUI's User Settings APIs
-
-
-
diff --git a/docs/eCookbook/demo-programs/simple-form.md b/docs/eCookbook/demo-programs/simple-form.md
deleted file mode 100644
index 43ed2721..00000000
--- a/docs/eCookbook/demo-programs/simple-form.md
+++ /dev/null
@@ -1,12 +0,0 @@
-Menu Bar
-
-There are 4 places you'll run into menus in PySimpleGUI
-1. Menu Bar
-2. Right Click Menu
-3. Button Menu
-4. System Tray
-
-This demo showns how the Menu Bar element works and the format for the Menu Bar menus.
-
-
-
diff --git a/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md b/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
deleted file mode 100644
index f2a1b4cb..00000000
--- a/docs/eCookbook/demo-programs/the-basic-pysimplegui-program.md
+++ /dev/null
@@ -1,49 +0,0 @@
-**Basic PySimpleGUI Program**
-
-* The basic PySimpleGUI 3 part program structure
-* Enlarging windows on Trinket
-* Running PySimpleGUI on the repl.it site
-
-------
-
-The basic PySimpleGUI program, in 3 parts.
-
-Almost all PySimpleGUI programs have this architecture.
-
-First you define the window.
-Then create the window.
-Finally you collect inputs and operate on 'events'
-
-This is a good one to copy as a template
-
-
-
------
-
-**Enlarging windows on Trinket**
-
-Sometimes when you're running these Trinket examples, the window is so small that it's difficult to make out the text. To view the examples in much larger sizes, choose "Fullscreen" from the menu.
-
-
-
-
-This will make your window go from this:
-
-
-
-to this:
-
-
-
-
-
-----
-
-**Running code on repl.it**
-
-In addition to being able to run PySimpleGUI code online here on Trinket, you can also run PySimpleGUI on repl.it. The advantage to running on repl.it is that you have the ability to pip install nearly anything. Trinket severly limits what you can install and in fact with each of these examples the entire PySimpleGUI source code is being included. On repl.it the PySimpleGUI package is installed automatically for you.
-
-Trinket seems to block embedding iframes to other sites. This link will display the above program on repl.it.
-
-https://repl.it/@PySimpleGUI/Basic-PySimpleGUI-Template
-
diff --git a/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md b/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
deleted file mode 100644
index 7f3e1753..00000000
--- a/docs/eCookbook/demo-programs/ti-datamath-ii-calculator.md
+++ /dev/null
@@ -1,12 +0,0 @@
-All credit for this code, the video and hard work belongs to Israel Dryer. His GitHub repository is located here: https://github.com/israel-dryer
-
-This calculator was developed as part of a YouTube tutorial. You can watch the video that describes how to make this calculator here:
-
-https://youtu.be/x5LSTDdffFk
-
-The GitHub location for the source can be found here:
-
-https://github.com/israel-dryer/PyDataMath-II
-
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md b/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
deleted file mode 100644
index cc48024b..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/1-4-24-dice-game.md
+++ /dev/null
@@ -1,21 +0,0 @@
-1-4-24 Dice Game (incomplete)
-
-This is an exercise in duplicating a user interface written for Appjar. Duplicating another GUI has been a great way to compare and contract PySimpleGUI with other GUI packages. Something is always learned.
-
-It's based on the program posted on Reddit:
-
-https://www.reddit.com/r/learnpython/comments/ecykvx/more_help_with_1424/
-
-This program is incomplete. I'm unsure of the rules of the game, so the game mechanics are there but it's incomplete as the scoring isn't right yet.
-
-Based on this program
-
-
-
-On Windows the program below produces this window (change size of score to 14 for windows)
-
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md b/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
deleted file mode 100644
index 3798b65e..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/adventure-game-popup-windows-with-delayed-text.md
+++ /dev/null
@@ -1,15 +0,0 @@
-**Popup Window with Delayed Text Output**
-
-The idea here is to present text on a character by character basis... as if someone was typing it on a keyboard or "saying" something in a text based adventure game.
-
-This Reddit mockup is based on this post:
-https://www.reddit.com/r/Python/comments/ed6pok/do_you_prefer_tkinter_or_pygame_for_your/
-
-The user can interrupt the message causing the window to close immediate, or they can wait for the entire message to be displayed and then close the window. An option could be added that would cause the full text to be displayed on the first button click and then the second click will close the window.
-
-On Windows this is how the window appears:
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/calculator.md b/docs/eCookbook/examples-for-reddit-posts/calculator.md
deleted file mode 100644
index 555d7c95..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/calculator.md
+++ /dev/null
@@ -1,24 +0,0 @@
-**The Classic Simple Calculator **
-
-This program is the beginning of a typical calculator. It was done to see what creating one in PySimpleGUI versus tkinter looked like.
-
-A full-blown calculator was not completed. This was an exercise meant to duplicate the look and operation of the GUI, not the entire program. The things that are operational are:
-
-* Numeric entry via buttons
-* Numeric entry via keyboard
-* Clear display using CE button
-
-All of the other buttons are generating events, the logic hasn't been added to do somethiuung with the button click.
-
-The goal was to duplicate this GUI
-
-
-
-On windows the PySimpleGUI code produced this program
-
-
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md b/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
deleted file mode 100644
index 07dd3d9b..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/change-slider-based-on-input.md
+++ /dev/null
@@ -1,9 +0,0 @@
-A demo program to address this Reddit post:
-https://www.reddit.com/r/learnpython/comments/fdx0io/moving_a_slider_with_a_button_click/
-
-The idea is for a slider to be updated to the value input by the user in the input box.
-
-You can click the "Submit" button or press the enter key to complete the input.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md b/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
deleted file mode 100644
index f5f2964a..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/choose-file-from-a-list.md
+++ /dev/null
@@ -1,8 +0,0 @@
-A handy demo pattern for you to follow should you want a user interface with a list of files along the left hand edge and something done with those files on the right side of the window.
-
-This is a highly "responsive" PySimpleGUI layout in that it will immediately take action when the user interacts with the window. You do not need to click a button to indicate a choice was made. You can also paste the folder path into the input box and the listbox will immediately populare with the correct folder's contents.
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md b/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
deleted file mode 100644
index c6905b91..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/coin-calculator.md
+++ /dev/null
@@ -1,19 +0,0 @@
-**Coin Calculator **
-
-
-
-This is an example of a program originally written for tkinter. The length is roughly 1/2 the original program. However, it's the readability of the lines that is the more important difference.
-
-Note - need to add formatting of the text being output so that it's closer to looking like dollars and cents. This can be done by modifying these 4 lines of code:
-```python
- window['Quarters_total'].update(quarters)
- window['Dimes_total'].update(dimes)
- window['Nickels_total'].update(nickels)
- window['Pennies_total'].update(pennies)
-```
-
-Use f-strings insead of the variable names directly as paramters to `update`. It seemed better to keep the code simpler looking than add the formatting.
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md b/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
deleted file mode 100644
index 6093aa6a..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/countdown-timer.md
+++ /dev/null
@@ -1,11 +0,0 @@
-**Duplication of Reddit tinkter Tutorial on a Countdown Timer**
-
-This post seemed like an interesting one to demonstrate the use of "async" windows in PySimpleGUI. It was roughly 1/2 the size of the tkinter version.
-
-https://www.reddit.com/r/Python/comments/eh9461/countdown_gui_using_python_it_is_not_pretty/
-
-Here is how it looks on Windows...
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md b/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
deleted file mode 100644
index 4adbc947..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/counters-using-keyboard.md
+++ /dev/null
@@ -1,6 +0,0 @@
-**Another Reddit Mockup**
-
-This time we're taking keyboard characters 1-9 and counting the number of times that character was pressed. There are labels going across the window with counters under them.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md b/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
deleted file mode 100644
index 1f195b6b..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/dashboard-mockup-for-a-car.md
+++ /dev/null
@@ -1,12 +0,0 @@
-Mockup of a car's dashoboard for Reddit
-
-NOTE - This program requires use of an unrelease PySimpleGUI.py that you can download from GitHub and place in your application's folder. This file is also included here as part of the Trinket itself. If you download the ZIP, you'll get both the application and the PySimpleGUI file.
-
-This was the hand drawn image provided as a mockup:
-
-
-And this is the window that the code produces:
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md b/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
deleted file mode 100644
index 10a2b451..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/distance-calculator.md
+++ /dev/null
@@ -1,8 +0,0 @@
-### Example of a "generated" layout based on a user's input
-
-In this case the poster wants a GUI that will ask for a different number of input fields depending on the value entered.
-
-I think this program does what's desired. First a number is obtained using a simple popup, then a full layout is made and finally the window is shown and available for interaction. Rather than it being a 1-shot window it's a fully functioning window should someone want to edit one of the addresses and re-calculate.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/fade-window.md b/docs/eCookbook/examples-for-reddit-posts/fade-window.md
deleted file mode 100644
index c5e2be22..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/fade-window.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Fading Window
-
-While it doesn't fade on Trinket, this window does fade away on Windows:
-
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md b/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
deleted file mode 100644
index dbfcb98f..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/input-2-fields.md
+++ /dev/null
@@ -1,8 +0,0 @@
-A simple GUI with 2 inputs for this Reddit post:
-https://www.reddit.com/r/learnpython/comments/jq17m3/ive_finally_written_my_first_script_for_work_but/
-
-The window will be shown until a button is clicked or closed with an "X". This is called a "One Shot" window. Add an event loop if you want more user interaction.
-
-You can add more advanced features such as adding a popup call to get the date, or adding a Date Chooser button to choose the date. This will be easier for the user and will automatically do a bit of validation of the input.
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md b/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
deleted file mode 100644
index 7d2fed56..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/ipynb-to-py-converter.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## Quick Mock-up of a Tkinter GUI Posted on Reddit
-
-It's always a fun exercise to see what it takes to duplicate a GUI written using another framework. It's great practice and I learn something from the original author's work every time.
-
-This one was unique in that most tkinter GUIs are not as responsive. The text color for the checkboxes changes to either green or red immediately upon making a selection. It's a clever touch that I don't recall seeing in another tkinter GUI. Kudo's to the original author.
-
-There is an extra line of code required to set the icon because this example is running on Trinket.
-
-All credit for this GUI's design goes to Github User saikatsahana77
-
-You'll find his original project here:
-https://github.com/saikatsahana77/ipynb_to_py_converter
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md b/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
deleted file mode 100644
index 542cbfb2..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/kilometer-to-mile-converter-for-reddit.md
+++ /dev/null
@@ -1,20 +0,0 @@
-**Example Program for Reddit**
-
-
-
-Sometimes little programs are written to demonstrate concepts for Reddit posts.
-These make good teaching tools so you'll find a few have made it onto the list.
-
-This program demonstrates simple input from and output to a window. Additionally
-a couple of parameters are used to "complete" the interface so that it's nice
-for the user. Think for a moment about how people will use your GUI... take a
-moment to design it. There were 2 options in this program that were nice
-finishing touches.
-1. The return key signals the user has completed input
-2. After the output is displayed, the input field is cleared for the next entry
-
-This program also uses the `change_look_and_feel` call to quickly add some color
-to the window.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/login.md b/docs/eCookbook/examples-for-reddit-posts/login.md
deleted file mode 100644
index 8b76f81f..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/login.md
+++ /dev/null
@@ -1,7 +0,0 @@
-## Simple Login
-
-Prompts for a User Name and a Password. The password is protected from view while being typed in.
-
-You can use the Return key or the login button to submit your entered information.
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md b/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
deleted file mode 100644
index 4ebc43a2..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/machinerys-handbook.md
+++ /dev/null
@@ -1,18 +0,0 @@
-A Mockup Of Another Reddit Project
-
-This is an ideal project for PySimpleGUI. OK, so maybe it's claimed for just about every GUI problem, but only when it fits. And for this project, it fits.
-
-The Redit post where this project was mentioned:
-
-https://www.reddit.com/r/Python/comments/ee6n53/advice_on_code_before_i_make_it_bigger/
-
-And here's the project's GitHub:
-
-https://github.com/wigglememore/Machinerys-Hanbook-in-Code
-
-What made this project especially appealing to add a GUI onto is the fact that it was written in a well-structured manner. All of the input was isolated in a single file. It was easy to go from that file to a GUI.
-
-At the end of the function the values dictionry is returned.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md b/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
deleted file mode 100644
index 009a8c3f..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/maze-solution-finder.md
+++ /dev/null
@@ -1,21 +0,0 @@
-A Maze Solution Finding Algorithm
-
-This program was initialy posted to Reddit as a command line application that produced a folder full of PNG files representing the maze solution. It was only after you concatenated these images together to create a flip-book style movie that you got an appreciation of the graphics.
-
-Rather than outputting these PNG files to a folder, how about outputting them to a GUI window?
-
-That's where the idea of adding on a GUI came to be. An hour later and this was the result.
-
-You are first asked to choose the TXT file representing the maze.
-
-Then you'll be shown the maze and an animation of it being solved.
-
-You can view this program without the source code here:
-
-https://pysimplegui.trinket.io/sites/maze
-
-Here is how it looks running on windows:
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md b/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
deleted file mode 100644
index 21eff79a..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/multiple-entry-in-same-window.md
+++ /dev/null
@@ -1,15 +0,0 @@
-Here's a little demo program in response to this help request on Reddit:
-
-https://www.reddit.com/r/learnprogramming/comments/h884vg/is_there_any_easy_gui_maker_for_python/
-
-The idea is to get an initial value in an input box, then get 3 more values in the same box.
-
-In this implementation you can press the "Enter" button or the return key to enter a value.
-
-The result is put into a single list that is shown at the end.
-
-On Windows it looks like this:
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md b/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
deleted file mode 100644
index d2a89895..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/navigating-focus.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Navigating Focus Using Arrow Keys
-
-This example shows how you can navigate through your windows's elements by using the left and right arrow keys. The down arrow key is set to exit the program.
-
-The code that sets up the use of arrow keys are these 3 bind statements. They cause events to be generated when those keys are pressed on the keyboard:
-```python
-window.bind('', '-NEXT-')
-window.bind('', '-PREV-')
-window.bind('', 'Exit')
-```
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/password-entry.md b/docs/eCookbook/examples-for-reddit-posts/password-entry.md
deleted file mode 100644
index 0e7f2f7c..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/password-entry.md
+++ /dev/null
@@ -1,6 +0,0 @@
-GUI for checking for a correct password using a hash code.
-
-If you enter "gui" as the password, then you'll get another window that enables you to create a hashcode based on your own string.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md b/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
deleted file mode 100644
index ed119ec1..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/pi-temperature-control.md
+++ /dev/null
@@ -1,21 +0,0 @@
-A super-quick mockup of a replacement GUI that was originally written in tkinter.
-
-It's meant to run on a Raspberry Pi but has the GPIO stuff not present at the moment. It's only the GUI.
-
-It would be best to completely separate the hardware / GPIO code into functions. This will allow the GUI to be run and tested on platforms other than the Pi that don't support GPIO. For those platforms the functions that do GPIO can simply return.
-
-
-
-The original tkinter code can be found here:
-
-https://www.reddit.com/r/learnpython/comments/e2qcdz/pid_interface_keeps_crashing/
-
-When run on Windows the code produces this GUI
-
-
-
-Running on the Pi it looks nearly identical
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md b/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
deleted file mode 100644
index e8ad83ab..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/png-image-viewer.md
+++ /dev/null
@@ -1,8 +0,0 @@
-##PNG Image Viewer
-
-Super-simple image viewer.
-
-Click on the image to move to the next image.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md b/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
deleted file mode 100644
index d9cae57c..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/printing-to-a-gui-window.md
+++ /dev/null
@@ -1,18 +0,0 @@
-"Printing" to a GUI window
-
-Demonstration of displaying your program's text information in a variety of ways.
-
-
-
-There are a number of ways to display text information using PySimpleGUI. A few include:
-
-1. Use the "Debug Window" by calling sg.Print
-2. Call a `popup` where the parms passed in will be shown in a new window
-3. Create your window with an Output Element in it
-4. Change the value of a `Text` Element by calling its `update` method
-5. Change the value of a `Multiline` Element by calling its `update` method
-
-This code demonstrates several of these ways. You'll see 2 windows displayed. One is the Debug Window, the other is your custom window with output and text elements.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md b/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
deleted file mode 100644
index 10c0eb24..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/reddit-c-to-c-frontend.md
+++ /dev/null
@@ -1,8 +0,0 @@
-A Simple Input 2 Files Frontend
-
-As specified by Reddit post:
-
-https://www.reddit.com/r/learnprogramming/comments/egql7t/help_understanding_guis/
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md b/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
deleted file mode 100644
index 99d71f4e..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/reddit-multiple-rows-option-menu.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Demo of using a list comprehension to generate a multi-row layout
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md b/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
deleted file mode 100644
index 0108eecd..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/reddit-scraper.md
+++ /dev/null
@@ -1,21 +0,0 @@
-Reddit Scraper - Status Update Front-End
-
-If you want to see a fully functional Reddit search program that uses the Reddit PRAW APIs, then check out the [Reddit Search Demo Program](https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Reddit_Search.py) found on the PySimpleGUI GitHub.
-
-Waits for a Start button then simulates reading from Reddit and updating text in the window with the current posts's title.
-
-You can choose the subs you want to read using the listbox and then click "Start Scrape" to loop through reading the subs.
-
-If an "Abort" is desired, then a call to `window.read()` could be added and checked inside the download loop. For now it's a simple get the list of subs and read each, displaying the information as it's read.
-
-A progress meter runs along the bottom and varies depending on the number of entries in the sub.
-
-Looks like this on Windows:
-
-
-
-In response to Reddit post:
-
-https://www.reddit.com/r/learnpython/comments/efw4c8/help_updating_tiles_on_tkinter_gui/
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md b/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
deleted file mode 100644
index 818fe135..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/sales-commission-calculator.md
+++ /dev/null
@@ -1,12 +0,0 @@
-An example solution to this Reddit post:
-
-https://www.reddit.com/r/learnpython/comments/jgmvl7/this_is_probably_a_stupid_question/
-
-The problem is a basic sales calculator. This particular example is quite primitive. It simply takes a single input, does a simple calculation and outputs a total.
-
-The window produced on Windows looks like this:
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md b/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
deleted file mode 100644
index 07f017e9..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/shopify-reddit-mockup.md
+++ /dev/null
@@ -1,23 +0,0 @@
-Another "Quick Mockup" (under an hour) of a GUI requested on Reddit
-
-The GUI design was provided in this post.
-
-https://www.reddit.com/r/Python/comments/eilntg/should_i_create_gui_on_tkinter/
-
-This was the design provided
-
-
-
-Here is what the PySimpleGUI mockup looks like running on Windows.
-
-
-
-The code has a couple of places where padding needs adjusting when running on a real machine versus Trinket. It's a quick mockup and can certainly be improved from this prototype. It's meant to show what's possible.
-
-
-The "Published" (without showing the code) version is here:
-
-https://pysimplegui.trinket.io/sites/reddit-mockup-shopify
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md b/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
deleted file mode 100644
index 33c362bd..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/spectrophotometry-from-twitter.md
+++ /dev/null
@@ -1,16 +0,0 @@
-Quick mock-up of a window spotted on Twitter.
-It's a fun challenge to see how difficult it is to duplicate tkinter based programs.
-
-I don't know the number of lines of code for this source window:
-
-
-
-
-The PySimpleGUI version required 11 lines of code to duplicate it.
-
-
-
-Here is the source code for the above window:
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md b/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
deleted file mode 100644
index 3922334f..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/stats-the-update-periodically.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Super-Simple Periodic Update Demo
-
-This one is a window that runs every second and updates some text in the window to reflect the values of 10 random numbers. Modify to add whatever kinds of Elements you want (like Tables, or rows of text). Just drop the changes into the event loop
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/text-adventure.md b/docs/eCookbook/examples-for-reddit-posts/text-adventure.md
deleted file mode 100644
index d1ceaf97..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/text-adventure.md
+++ /dev/null
@@ -1,16 +0,0 @@
-A Text Adventure GUI Mockup
-
-A quick mockup for a GUI in response to this Reddit post:
-
-https://www.reddit.com/r/learnpython/comments/dza038/is_there_a_way_to_request_and_save_user_input/
-
-This program creates a window that takes in user input and displays "results" in the window. The results are displayed using simple "print" statements.
-
-On Windows, the window look like this:
-
-
-
-Note that colored text output to an `Output Element` is not currently supported. You can have colored text in the main window itself but not in these scrolling type Elements. However, that was a very recent change to PySimpleGUIQt that DOES allow colored text to be sent to a scrolling output Element (the Multiline). Looking at adding it to the tkinter (plain PySimpleGUI) port very soon.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md b/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
deleted file mode 100644
index 8d562100..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/tic-tac-toe.md
+++ /dev/null
@@ -1,37 +0,0 @@
-## Tic Tac Toe
-
-In response to Reddit post:
-https://www.reddit.com/r/learnpython/comments/iq4wfs/question_how_do_you_manage_events_lots_of_events/
-
-The basic question is how to handle events coming from a large number of sources, or a large number of buttons in this case.
-
-The answer is to use the information about the button along with a datastructure to record some information about it. In this case, for Tic Tac Toe, the "Game Board" is where you want to record information. You want to know if a spot is taken and if so, by who.
-
-One simple way to do this is via a dictionary. Record each spot that's been played in a dictionary. The "key" will be the board location and the value will be which player played a piece there.
-
-Because keys can be "anything" in PySimpleGUI (the exception is they cannot be lists), a tuple would be a good choice. This gives you a (row, col) description of the piece and fits well visually too. You can use the row, col in a loop to create the board. Because list comprehensions can be used to create layouts, then it works out well to use row, col as the key.
-
-This is how the window looks runnins on Windows:
-
-
-
-
-The main board is created with this single line of code:
-
-```python
-[[sg.Button(size=(3,1), key=(row,col)) for col in range(3)] for row in range(3)]
-```
-
-Because lists can be combined, it's possible to "build" a layout up from pieces. In this case, there are 3 sections to the board. There's a Text header at the top, then the board, then a couple of buttons on the bottom. This layout can be built with 3 lines of code. There's the initial Text Element at the top that starts the layout. Then the board is added on and finally the buttons. The layout creation is thus:
-
-```python
-layout = [[sg.Text('X Starts First')]]
-layout += [[sg.Button(size=(3,1), key=(row,col)) for col in range(3)] for row in range(3)]
-layout += [[sg.Button('Reset'), sg.Button('Cancel')]]
-```
-
-The rest of the code is pretty self-explanatory. It involves using a dictionary to store the locations that have been played and which player played that location.
-
-Because the board is small, you'll want to click the upper left corner of the code display and choose the Display Full Screen option.
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md b/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
deleted file mode 100644
index f392422b..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/ticket-reservation.md
+++ /dev/null
@@ -1,22 +0,0 @@
-Ticket Reservation Example
-
-This program duplicates the window that this tutorial creates.
-
-https://www.reddit.com/r/Python/comments/dk3rff/python_gui_project_ticket_reservation_style_and/
-
-When using tkinter 41 lines of code are used. This PySimpleGUI program uses 19
-That makes the PSG program roughly 43% the size of the tkinter program, which is within the estimates of 1/2 to 1/10.
-
-Because this is a "data entry" type window, care was taken to clear the fields after the record was submitted and the cursor (focus) was placed back up at the name field, ready for a new record to be added.
-
-This is a screenshot of the tkinter version
-
-
-
-And this is what the PySimpleGUI window produces
-
-
-
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
deleted file mode 100644
index 13ac5e3c..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/visual-basic-mockup.md
+++ /dev/null
@@ -1,24 +0,0 @@
-**Visual Basic Program Duplication**
-
-The exercise here is to duplicate a program originally written in Visual Basic.
-
-This is the provided screenshot
-
-
-
-The first thing to do with all PySimpleGUI programs is to define what your "rows" will look like. In this case it appears as if 3 rows are present.
-
-The bottom row is a series of "container elements" including Frame Elements and a Column Element
-
-
-
-
-
-Here is the start of the code needed to implement this particular layout.
-
-Information about the program's operations are displayed in the middle of the window. It's assumed that will be perhaps a table in the future, but for now it is a handy location to route printed output to the window.
-
-Clicking the "Process Files" buttons will print out the values of the `values` variable which is the values dictionary returned from the call to `window.read()` as can be seen in the code.
-
-
-
diff --git a/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md b/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
deleted file mode 100644
index 5d6f4210..00000000
--- a/docs/eCookbook/examples-for-reddit-posts/visual-basic-to-python.md
+++ /dev/null
@@ -1,16 +0,0 @@
-This page shows how PySimpleGUI can be used to duplicate (or nearly duplicate) Visual Basic interfaces with ease.
-
-This is the target program to duplicate
-
-
-
-This short PySimpleGUI program is under 40 lines of code and implements the first row of controls. On Windows, the special characters (arrows) show up correctly. On Trinket they do not and will in fact give you an error if you click on one of these buttons.
-
-This is how the program looks when run on Windows
-
-
-
-VERY little time was spent creatring and even less time spent polishing it. Stuff doesn't line up perfectly, etc. Like any GUI, time needs to be spent making these kinds of fine adjustments. The point here was to show something representative quickly.
-
-
-
diff --git a/docs/eCookbook/games/battleship.md b/docs/eCookbook/games/battleship.md
deleted file mode 100644
index a86eabaf..00000000
--- a/docs/eCookbook/games/battleship.md
+++ /dev/null
@@ -1,34 +0,0 @@
-**A GUI front-end for a Battleship or Minesweeper game**
-
-This is not a complete game but rather a GUI that's ready for you to add your game logic to it.
-
-There are 3 versions of this code, each with different levels of use of list comprehensions.
-
-This window is a grid of buttons with each key being the row and column of the button.
-
-It takes in clicks and will randomly change the button color and text that was clicked to either an "M" for Missing or "H" for hit.
-
-The idea here is to drop in the code for the hit/miss logic and call this code when a button is clicked.
-
-The `layout` definition is unusual in this example compared to other PySimpleGUI programs. Normally the layout is done all at one time, in a single statement `layout = [[.....]]`. This code uses a "contactenated layout" because the buttons are created using a list comprehension.
-
-Note that these programs are using the new expanded Look and Feel Themes released in version 4.6 of PySimpleGUI.
-
-Screenshot from Windows:
-
-
-
-**Implementation 1 - List Comprehension for Board**
-
-
-
-**Implementation 2 - List Comprehension for Board Rows**
-
-
-
-
-
-**Implementation 3 - No List Comprehension**
-
-
-
diff --git a/docs/eCookbook/games/conways-game-of-life.md b/docs/eCookbook/games/conways-game-of-life.md
deleted file mode 100644
index e123617b..00000000
--- a/docs/eCookbook/games/conways-game-of-life.md
+++ /dev/null
@@ -1,14 +0,0 @@
-**Conway's Game Of Life**
-
-This demo is an adaptation of a text based Game of Life. The PySimpleGUI code was added to an existing engine. The GUI code is pretty well isolated, especially the board creation / setup code which is in a couple of class methods.
-
-It demonstrates utilizing a `Graph` element to draw rectanges based on user mouse clicks. This kind of interface works well on both a traditional window + mouse setup or on a tablet's touchscreen.
-
-This same code can be run on Android for example using PyDroid3.
-
-The "Published" version of this code can be found here:
-https://pysimplegui.trinket.io/sites/conways-game-of-life
-
-It's the same output but done in a full-window, without the code being shown.
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/games/dice-roller.md b/docs/eCookbook/games/dice-roller.md
deleted file mode 100644
index f491d972..00000000
--- a/docs/eCookbook/games/dice-roller.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## Dice Roller
-
-A classic beginner problem to solve.... simulate rolling some dice.
-
-This little program allows you to choose the numer of sides on the dice and the number of dice to roll.
-
-There's nothing really tricky about this program. The rolling and display of the results has been compressed down to a single line of code:
-```python
- window['-ROLLED-'].update(' '.join([str(random.randint(0, int(values['-DICE-'])-1)+1) for i in range(int(values['-NUM DICE-']))]))
-
-```
-
-A list comprehension is used to generate the list of dice results, combined into a single string and then output in the window.
-
-
-
diff --git a/docs/eCookbook/games/minesweeper.md b/docs/eCookbook/games/minesweeper.md
deleted file mode 100644
index 87b453e1..00000000
--- a/docs/eCookbook/games/minesweeper.md
+++ /dev/null
@@ -1,33 +0,0 @@
-The classic Minesweeper game!
-
-The user interface requirements for Minesweeper are a little unusual compared to most GUIs. The use of the right mouse click to mark squares with flags is the most difficult part to implement in PySimpleGUI because right clicks are not normally passed along to the user.
-
-The specific action needed is the ability to right click on a `Button` and receive an event. In version 4.11.0 of PySimpleGUI this capability was made easier with the addition of the `.bind` method for both Elements and Windows. It is what is used to "bind" the right mouse button click to a button.
-
-This implementation is based on a post made here:
-
-https://learnku.com/articles/37714
-
-There are 3 noteable changes:
-
-1. Button keys were made into tuples instead of strings
-2. Right mouse button clicks are received through `window.read()` calls instead of tkinter callbacks
-3. Graphic images were moved into the source code by using Base64 images
-
-The posted code was written prior to the `bind` method being available.
-
-Because Trinket's display size is so small, the board size is limited to a 10 x 8 board. Running on your local computer you'll want to change the display variables at the top to 24 x 14 and change the bombs from 10 to 80
-
-On Windows the game looks really nice thanks to the author paying attention to the details and choosing nice graphics and by matching colors
-
-
-
-To play this game in your browser using this Trinket, you'll probably want to play the "Published" version as it doesn't show the source code and provides a cleaner view of the application.
-
-Here's the published version's linke:
-
-https://pysimplegui.trinket.io/sites/minesweeper
-
-
-
-
diff --git a/docs/eCookbook/games/sudoku.md b/docs/eCookbook/games/sudoku.md
deleted file mode 100644
index 182bf4b1..00000000
--- a/docs/eCookbook/games/sudoku.md
+++ /dev/null
@@ -1,44 +0,0 @@
-## Sudoku In a Line
-
-This demo began as a demonstration of the many ways a Sudoku board could be created using PySimpleGUI. It ended up being more complete application. The "build-a-Sudoku-board" port of the code can be represented in a somewhat boring single line of code.
-
-```python
-sg.Window('Sudoku',[[sg.Frame('',[[sg.I(random.randint(1,9), justification='r', size=(3,1),key=(frow*3+row,fcol*3+col)) for col in range(3)] for row in range(3)]) for fcol in range(3)] for frow in range(3)]+ [[sg.B('Exit')]]).read()
-```
-
-This layout uses list comprehensions to create the classic Sudoku board that is 9 boxes each consisting of 9 numbers. The single line of code produces this window when run on Windows 10:
-
-
-
-The board isn't a "valid" one. It's filled with random digits.
-
-Building it out further required adding on a board generator and then a few fun features. The board generation was discovered by searching through GitHub. I finally settled on this elegantly simple implementaiton found in this GitHub Repository:
-
-https://github.com/MorvanZhou/sudoku
-
-A big thanks is thus owed to Morvan Zhou for creating these puzzles for our enjoyment.
-
-You begin the game with a board much like this one:
-
-
-
-You can check your progress at any point by clicking `Check`. This will color each cell depending on the status of the cell.
-
-* If the answer is correct, the background will be white (or whatever is normal for the theme you're using)
-* If the answer is incorrect, the background color will turn red
-* If the answer is blank, the background will turn yellow
-
-
-
-It makes it easy to see what you've won the game. There's also a popup that's displayed when you click `Check` and the board has been correctly solved. Click `Solve` and the answers are all filled in for you.
-
-
-
-If you wish to start a new game click `New Game`. The "Mask Rate" determines what percentage of the cells are erased at the beginning.
-
-If you wish to run this program using Trinket without the debugger, the "Published" version is here:
-
-https://pysimplegui.trinket.io/sites/sudoku
-
-
-
diff --git a/docs/eCookbook/games/uno-card-game.md b/docs/eCookbook/games/uno-card-game.md
deleted file mode 100644
index f8cf59a8..00000000
--- a/docs/eCookbook/games/uno-card-game.md
+++ /dev/null
@@ -1,12 +0,0 @@
-**Uno Card Game**
-
-Demonstration of how to use a Graph Element to "draw images", in this case
-cards, so that they overlap.
-
-The low resolution on Trinket resulted in the top and bottom being cropped
-from view. You can see enough to play and get an understanding one way of
-using PySimpleGUI buttons and the graph element to create a card came.
-
-
-
-
diff --git a/docs/eCookbook/games/wordle.md b/docs/eCookbook/games/wordle.md
deleted file mode 100644
index 5996902c..00000000
--- a/docs/eCookbook/games/wordle.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Wordle
-
-A front-end for the popular Wordle game
-
-You will need to add some additional code to hook up to a dictionary of words. This Trinket has the code to handle all of the user input & output. It takes in characters, converts to upper case, handles backspace key and enter key. It also color codes the submitted answer against the "Current word" (currently a single constant).
-
-
-
diff --git a/docs/eCookbook/graph-element/animated-line-graph.md b/docs/eCookbook/graph-element/animated-line-graph.md
deleted file mode 100644
index 18dabbf7..00000000
--- a/docs/eCookbook/graph-element/animated-line-graph.md
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/eCookbook/graph-element/dashboard-mockup.md b/docs/eCookbook/graph-element/dashboard-mockup.md
deleted file mode 100644
index 524e4919..00000000
--- a/docs/eCookbook/graph-element/dashboard-mockup.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
-The beginnings of a Dashboard. Shows dummy data as a moving line graph, some Elements to gather input, a play and pause button.
-
-This demo uses a construct named "User Defined Elements". These are functions that return an element and thus the function call can be made from inside of a layout. In the layout there 3 elements on a row that look like this:
-
-`[ColumnParm('Model', 1, model_dict), ColumnParm('Parameter', 2, parm_dict),ColumnParm('Data Set', 3, data_set_dict), ],
-`
-
-`ColumnParm` returns a `Frame` Element that has a number of radio buttons inside.
-
-This link shows the program running on Trinket in "Published" mode:
-
-https://pysimplegui.trinket.io/sites/quick-and-dirty-dashboard-for-reddit
-
-
-And as usual here is the code:
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/graph-element/fourier-animated-graph.md b/docs/eCookbook/graph-element/fourier-animated-graph.md
deleted file mode 100644
index ffe51965..00000000
--- a/docs/eCookbook/graph-element/fourier-animated-graph.md
+++ /dev/null
@@ -1,16 +0,0 @@
-### A Fourier Transform Graph
-
-
-
-This compact and impressive Fourier Transform demo program was submitted by an innovative PySimpleGUI user named Jason Yang (https://github.com/jason990420). He's created a number of other amazing PySimpleGUI programs such as the solitaire and minesweeper games. Not only did he write this impressive demonstration, but he also figured out how to create line drawings in a highly efficient manner that resulted in a new Graph Element drawing primitve.
-
-The underlying drawing primitive that makes it all possible is a new Graph Element method, `draw_lines`. If you want to run this code, you'll need to download the latesst version of PySimpleGUI from the PySimpleGUI GitHub (http://www.PySimpleGUI.com). The code will be released to PyPI soon as release 4.19.0. For nom you'll need to get it from GitHub as version 4.18.0.9.
-
-When run on a desktop PC, the update is much smoother.
-
-You can run the Trinket "published" version for a cleaner look here:
-
-https://pysimplegui.trinket.io/sites/fouriergraph
-
-
-
diff --git a/docs/eCookbook/graph-element/graph-element-bar-chart.md b/docs/eCookbook/graph-element/graph-element-bar-chart.md
deleted file mode 100644
index fb24fecd..00000000
--- a/docs/eCookbook/graph-element/graph-element-bar-chart.md
+++ /dev/null
@@ -1,51 +0,0 @@
-## Graph Element - Bar Charts
-
-Sometimes using Matplotlib is overkill.
-
-Some graphing can be done trivially with PySimpleGUI. A **Bar Chart** in particular is *quite easy*.
-
-The reason bar charts are simple and easy to make can be found by breaking down a bar chart. A bar chart is literally a series of rectangles.
-
-## A 6-line Example
-
-Here's an example with the minmum number of lines of code I could write and still have it be readable.
-
-Each of the steps is 1 line of code except for the for-loop being 1 more
-1. Import PySimpleGUI
-2. Make the Window
-3. Loop through the data
-4. Draw a Bar
-5. Draw a label above it with the value of the data point
-6. Wait for window to be closed by user
-
-
-
-
-
-
-
-## Drawing X and Y Axis
-
-This example is a copy of a chart produced using Matplotlib.
-
-The chart data is contained in 3 lists.
-
-1. The X-Axis labels for each bar
-2. The color of each bar
-3. The Y-Value for each bar
-
-This example is rather specific as the number of data points was known ahead of time as was the maximum Y value. A minumum amount of code enables you to see each component of the graph.
-
-
-
-
-
-
-
-## Another Example
-
-This chart updates every time you click the button. The bar values are labeled as well with the label being at the top of each bar. This is just the starting point for you to jump from and modify.
-
-
-
-
diff --git a/docs/eCookbook/graph-element/graph-element-drag-a-square.md b/docs/eCookbook/graph-element/graph-element-drag-a-square.md
deleted file mode 100644
index bcd84854..00000000
--- a/docs/eCookbook/graph-element/graph-element-drag-a-square.md
+++ /dev/null
@@ -1,19 +0,0 @@
-## Graph Element - Draw a square, drag it around
-
-This program is meant to show just how simple the Graph element can be to work with. The code has been trimmed down to a base minimum.
-
-The number of lines of code is 22 lines of actual program code, many of those are because of putting parameters on separate lines to make it easy for you to see them. It's 16 lines of code if you're counting "statements". The number isn't important. The simplicity is.
-
-Like many Demo Programs, this was written to demonstrate a bug that was happening. Testing new features or replicating bugs have been an excellent genesis for many of the Demo Programs.
-
-The high level summary of the code is:
-* Create the layout that is a single Graph Element of size 400 x 400 pixels
-* Make the window
-* Draw a square on the Graph Element
-* Event loop
- * `window.read()`
- * If the event is the Graph element's key, then it's a mouse click or drag event
- * Move the center of the square to where the mouse is located
-
-
-
diff --git a/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md b/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
deleted file mode 100644
index f7b30cef..00000000
--- a/docs/eCookbook/graph-element/graph-element-drawing-and-dragging.md
+++ /dev/null
@@ -1,15 +0,0 @@
-Dragging Stuff Around
-
-This is where the Graph Element really begins to open up some powerful applications. In this short drawing we're creating a paint program where you can drag with your mouse to create shapes and move them around on the Graph surface.
-
-Also demonstrated are the cursors that can be set. When moving things, the dursor is changed into a movement cursor.
-
-To run the program without the code on the screen, use this link to get a much larger view:
-https://pysimplegui.trinket.io/sites/graph-drawing-and-dragging
-
-Here's what it looks like on Windows
-
-
-
-
-
diff --git a/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md b/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
deleted file mode 100644
index a49382af..00000000
--- a/docs/eCookbook/graph-element/graph-element-line-graph-with-labels.md
+++ /dev/null
@@ -1,9 +0,0 @@
-A line graph showing the values of the data points along the line.
-
-The original source to this program can be found in this repository:
-https://github.com/okajun35/practice_pySimpleGUI/tree/master/chart
-
-Thank you to the PySimpleGUI fans from "Start Python Club" for submitting.
-
-
-
diff --git a/docs/eCookbook/graph-element/graph-element-sine-wave.md b/docs/eCookbook/graph-element/graph-element-sine-wave.md
deleted file mode 100644
index 25978aaf..00000000
--- a/docs/eCookbook/graph-element/graph-element-sine-wave.md
+++ /dev/null
@@ -1,8 +0,0 @@
-Using the Graph Element to make a line graph complete with X & Y axis labelled
-
-On Windows the program looks like this:
-
-
-
-
-
diff --git a/docs/eCookbook/graph-element/utah-teapot.md b/docs/eCookbook/graph-element/utah-teapot.md
deleted file mode 100644
index 0d4d31eb..00000000
--- a/docs/eCookbook/graph-element/utah-teapot.md
+++ /dev/null
@@ -1,18 +0,0 @@
-## Utah Teapot - Using a `Graph` Element
-
-https://en.wikipedia.org/wiki/Utah_teapot
-
-To quote from the Wikipedia page:
-> The Utah teapot, or the Newell teapot, is a 3D test model that has become a
-> standard reference object and an in-joke within the computer graphics community.
-> "Using a teapot model is considered the 3D equivalent of a "Hello, World!" program"
-
-This PySimpleGUI program originated from GitHub user [EdwardChamberlain](https://github.com/EdwardChamberlain/) who has given permission for it to be used here in the PySimpleGUI eCookbook. Thank you Edward!!
-
-This is a link to the GitHub repo where you'll find the latest version of the project:
-[PySimpleGUI-3D-Viewer](https://github.com/EdwardChamberlain/PySimpleGUI-3D-Viewer)
-
-You can rotate the object using the top-most slider labelled "R" or you can use your mouse to rotate it by dragging your mouse (hold the left mouse button while dragging) in the Graph area.
-
-
-
diff --git a/docs/eCookbook/graph-element/visualizing-sorts.md b/docs/eCookbook/graph-element/visualizing-sorts.md
deleted file mode 100644
index 77d4a445..00000000
--- a/docs/eCookbook/graph-element/visualizing-sorts.md
+++ /dev/null
@@ -1,11 +0,0 @@
-This demonstration shows how to use PySimpleGUI's Graph Element's drawing primitives to create a simple animation.
-
-In this case a Bubble Sort and an Insert Sort are shown. Other sorting algorithms can be easily added. You can adjust the speed in realtime by using the slider.
-
-This is how it looks on Windows:
-
-
-
-Here on Trinket the animation may not be as smooth
-
-
diff --git a/docs/eCookbook/layouts/centered-and-simple.md b/docs/eCookbook/layouts/centered-and-simple.md
deleted file mode 100644
index b73f8ff5..00000000
--- a/docs/eCookbook/layouts/centered-and-simple.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## Simple Window with Elements Centered
-
-This little demo has several concepts that may be of help to you
-* The elements are all centered in the window
-* The graphics are base64 and contained in the .py file itself
-* It has an animation
-
-
-It looks like this running on Windows:
-
-
-
-
-
diff --git a/docs/eCookbook/layouts/collapsible-sections.md b/docs/eCookbook/layouts/collapsible-sections.md
deleted file mode 100644
index 7f2f8611..00000000
--- a/docs/eCookbook/layouts/collapsible-sections.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Collapsible Sections
-
-Visible / Invisible settings on the plain tkinter based PySimpleGUI have been a real challenge. In release 4.28.0 a new function, `pin`, was added that will "pin" an element to a location in your layout. This will reserve the location for the element in the layout. Without it, the element will move when you make it inivisible and visible again.
-
-There is a 1-pixel "penalty" of sorts when using this capability. A single pixel is needed to reserve and hold this spot, a small price to pay given what you can do with this new capability.
-
-This demo shows how you can use this feature to make Column elements invisible as if a section of the window has been collapsed with the contents hidden.
-
-Here is how the demo looks running on Windows
-
-
-
-
diff --git a/docs/eCookbook/layouts/fixed-size-columns-with-justification.md b/docs/eCookbook/layouts/fixed-size-columns-with-justification.md
deleted file mode 100644
index 3b5496e5..00000000
--- a/docs/eCookbook/layouts/fixed-size-columns-with-justification.md
+++ /dev/null
@@ -1,27 +0,0 @@
-## Fixed Size Columns - With `element_justification`
-
-Generally speaking, PySimpleGUI likes it when you don't force sizes of things to be a specific number of pixels. Instead, it's suggested that you make things "float", to size themselves.
-
-The `Column` element supports setting a specific size for the Column, however, the use of the paramter `element_justification` does not work on these fixed size Columns. Instead, another approach is needed.
-Two options are (there may be more of course):
-1. Use a `Frame` element
-2. Instead of `size` parameter, use a `Sizer` element
-
-### The Frame Solution
-
-The easiest approach is to use a `Frame` element instead of a `Column`. If using a `Frame` element, then setting a fixed size works with the `element_justification` parameter.
-
-In order to get the vertical alignment the easiest solution is to use the `VPush` element above and below the layout. This will "push" from the top and the bottom with the result being that the layout is centered vertically.
-
-
-
-
-
-### The Column Solution
-
-The way to get both a fixed size Column and have the interrior be able to be justified is to use a little-known "helper element" called `Sizer`. This element simply adds space in horizontal and veritcal directions. The implementation of it is that it's simply a Column with padding added.
-
-To help you use these, this demo was created. It makes a "User Defined Element" (a function that looks like an element and can be used in layouts) that acts like a Column that enables you to have both a size and an element_justification parameter.
-
-
-
diff --git a/docs/eCookbook/layouts/push-and-vpush-elements.md b/docs/eCookbook/layouts/push-and-vpush-elements.md
deleted file mode 100644
index 2b6e8f30..00000000
--- a/docs/eCookbook/layouts/push-and-vpush-elements.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## `Push` and `VPush` Elements For Justification
-
-The aliases `Push` and `VPush` are aliases for `Stretch` and `VStretch`. `Stetch`, `VStretch`, and `Push` was in the 4.48.0 release. `VPush` will be in the 4.49.0 release.
-
-There are a couple of new Elements that help with layout justification (functions that act like elements to be precise).
-
-`Push` will push elements in a row away from it. If you have a row with a `Push` element on the left, then it will push the elements to the right of it to the right. If you have one on each end of a row, then the result will be the elements between them will be centered.
-
-`VPush` pushes rows of elements vertically in the same fashion that the `Push` does horizontally. Place a `VPush` on the first row and it will push the other rows to the very bottom of the container (e.g. window).
-
-This example centers a couple of elements in the middle of the window by surrounding them by `Push` and `VPush` elements.
-
-
-
diff --git a/docs/eCookbook/layouts/swapping-window-layouts.md b/docs/eCookbook/layouts/swapping-window-layouts.md
deleted file mode 100644
index 19953f8c..00000000
--- a/docs/eCookbook/layouts/swapping-window-layouts.md
+++ /dev/null
@@ -1,10 +0,0 @@
-**(Simulated) Swapping of Entire Window Contents**
-
-While it's not possible to make layouts that are truly dynamic in PySimpleGUI, you can make things appear they do.
-
-In this demo the goal is to swap out the entire window, except for the bottom row of buttons, with a completely different "layout".
-
-The way this is accomplished is to create multiple `Column` Elements that are all hidden except for the currently visible one.
-
-
-
diff --git a/docs/eCookbook/layouts/to-do-list-using-generated-layout.md b/docs/eCookbook/layouts/to-do-list-using-generated-layout.md
deleted file mode 100644
index 79b780da..00000000
--- a/docs/eCookbook/layouts/to-do-list-using-generated-layout.md
+++ /dev/null
@@ -1,45 +0,0 @@
-**Generated Layouts - To Do List Program**
-
-
-
-This program demonstrates how you can a Python "List Comprehension" to create
-a GUI layout. The layout is created in 3 steps.
-1. A title line
-2. The list of checkboxes and descriptions
-3. The buttons
-
-That is the layout that these 3 lines of code create
-
-```python
-layout = [[Text('My To Do List', font='Helvetica 15')]]
-layout += [[Text(f'{i}. '), CBox('', key=f'-CB{i}-'), Input(k=f'-IN{i}-')] for i in range(1,6)]
-layout += [[Button('Save'), Button('Load'), Button('Exit')]]
-```
-
-This program is a little different in that it imports the individual objects
-being used. Typically the import you'll find in most PySimpleGUI programs is
-
-```python
-import PySimpleGUI as sg
-```
-
-The result of importing each object is that you do not need the `sg.` before each function call, thus making the code even more compact. The layout looks cleaner as well.
-
-However, there are a few drawbacks. One is being able to easily spot calls to the PySimpleGUI package. Another is code completion. If you type `sg.` (control+SPACE) in an IDE, it will show you a list of choices from the PySimpleGUI pacakge that are available to you.
-
-It's being presented simply as another way of doing things. You'll find the other demos use
-
-```python
-import PySimpleGUI as sg
-```
-
-
-
----
-
-**To Do List using "normal" import (`import PySimpleGUI as sg`)**
-
-In this version, the typical import statement is used. The program is identical to the one above, but you'll notice that each element and PySimpleGUI object now has `sg.` in front of it. Nearly all demo programs use this import convention and users have adopted it as well. It's a standard of sorts at this point.
-
-
-
diff --git a/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md b/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
deleted file mode 100644
index feda9c58..00000000
--- a/docs/eCookbook/matplotlib/animated-matplotlib-line-graph.md
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/eCookbook/matplotlib/matplotlib-plot-browser.md b/docs/eCookbook/matplotlib/matplotlib-plot-browser.md
deleted file mode 100644
index 6f200304..00000000
--- a/docs/eCookbook/matplotlib/matplotlib-plot-browser.md
+++ /dev/null
@@ -1,17 +0,0 @@
-**Browse Matplot Examples - Click on list, See the Plot**
-
-This Demo Program was adapted to run on Trinket by shrinking down the size of the display window from 650,650 to 500,500. Shrinking the area makes the plots look a little crowded.
-
-These screenshots are from Windows. Click on the list on the left to view a plot.
-
-
-
-Slide up the "pane" on the bottom to reveal the source code for the plot you're viewing.
-
-
-
-Your application doesn't have to be this fancy. You could display your raw data in the hidden pane so that you can slide it up and view the underlying data.
-
-
-
-
diff --git a/docs/eCookbook/matplotlib/matplotlib-simple-plot.md b/docs/eCookbook/matplotlib/matplotlib-simple-plot.md
deleted file mode 100644
index e7b33321..00000000
--- a/docs/eCookbook/matplotlib/matplotlib-simple-plot.md
+++ /dev/null
@@ -1,20 +0,0 @@
-This demo program shows how to create a single Matplotlib graph and show it in a GUI window.
-
-Note the it lacks an "Event Loop".
-Normally instead of:
-
-```python
-event, values = window.read()
-```
-
-You would see an event loop:
-```python
-while True:
- event, values = window.read()
- if event is None:
- break
- ```
-
-If you wanted to show multiple graphs or have other GUI elements, then you would replace that line of code with the event loop above and you'll have a "Normal" PySimpleGUI window.
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/matplotlib/matplotlib-single-plot.md b/docs/eCookbook/matplotlib/matplotlib-single-plot.md
deleted file mode 100644
index 637e63d6..00000000
--- a/docs/eCookbook/matplotlib/matplotlib-single-plot.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## Single Matplotlib Plot
-
-This is your basic simple Matplotlib example
-
-What's nice about this demo is that it shows all of the parts required and each section is tiny
-
-You will paste your Matplotlib code at the top. The important thing to do is leave your drawing in a variable named `fig`
-
-There is a "helper" function in the middle.
-
-The bottom portion of the file is your GUI. There is only 1 line of code needed to take your Matplotlib drawing and place it into your GUI window. It is the call to `draw_figure`.
-
-This is how your window looks on Windows:
-
-
-
-
-
-
-
diff --git a/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md b/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
deleted file mode 100644
index 1f3afff7..00000000
--- a/docs/eCookbook/multi-threaded/desktop-widget-launcher-bar.md
+++ /dev/null
@@ -1,41 +0,0 @@
-## Desektop Widget - Launcher Bar
-
-### Trivial Operations - Changing layouts
-
-This demo has a nice little "minimize" feature. You click on a downarrow and the entire interface will "minimize" down into a single image.
-
-Here is the code that does those minimize and restore operations:
-
-
-```python
- 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)
-```
-
-If you're minimizing, then you want to hide the buttons and show the image. If you're restoring, then you're hiding the image and showing the panel of buttons.
-
-A simple thing to describe means less code for you and less complexity too.
-
-### The Button Bar
-
-Add a floating bar that enables easy launching of all programs on your system. Or launch your Python program or anything you want because you're a Python programmer.
-
-This is a copy of the Demo Program you'll find on the PySimpleGUI Repo:
-
-https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Desktop_Widget_Launcher_Bar.py
-
-It's a simple "launcher" application that you can run, move anywhere you want, and it'll return there next time you run it.
-
-Add your own buttons, images, etc, to launch your favorite programs, Python code, or call functions. Anything's possible when you write your own utilities
-
-
-
-For this Trinket, I matched the background color and used the settings feature to set it. This is why you will see a JSON file with the Trinket.
-
-
-
-
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
deleted file mode 100644
index 84682b74..00000000
--- a/docs/eCookbook/multi-threaded/multi-threaded-long-task-simple.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Using a Thread to complete a long task
-
-The demo shows you how to use a thread to perform an operation that takes a long time to complete. Normally if you attempt to do these operations in your GUI code, it will cause your GUI to appear to have stopped.
-
-This examples relies on global variables for the handshake between the GUI and the worker thread. Other demos you'll find here use Queues to communicate. This demo is meant to be very simple so that you do not need to use a Queue.
-
-
-
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md b/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
deleted file mode 100644
index 730ae9b5..00000000
--- a/docs/eCookbook/multi-threaded/multi-threaded-long-task-using-queue.md
+++ /dev/null
@@ -1,10 +0,0 @@
-### Using a Thread and a Queue To Accomplish Long Tasks
-
-Queues are a great way for threads to communicate. In this demo program we have a single long-operation that needs to be run. You'll find a function named `long_function_wrapper` where is where you will place your code that takes a long time to execute.
-
-When this function completes running, it sends a message to a Queue which is monitored by the main GUI thread.
-
-The GUI enables you to run more than 1 of these long-running tasks if you want. It keeps track of how many have been requested and tracks when each completes executing.
-
-
-
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md b/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
deleted file mode 100644
index d6a5530d..00000000
--- a/docs/eCookbook/multi-threaded/multi-threaded-multiple-workder-threads.md
+++ /dev/null
@@ -1,8 +0,0 @@
-### Multiple Background Threads Outputting Results in GUI
-
-Sometimes you have situations where you have persistent threads that run constantly in the background. These threads may need to output information to your GUI. Becuase you cannot directly call PySimpleGUI (tkinter) from another Thread, a communication mechanism is needed for the threads to communicate with the main GUI thread.
-
-This communication is often in the form of a queue. This demo program runs 3 threads. Each update their status in the GUI by sending a message to a queue that the GUI is monitoring.
-
-
-
diff --git a/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md b/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
deleted file mode 100644
index 4105c8f7..00000000
--- a/docs/eCookbook/multi-threaded/multi-threaded-write-event-value.md
+++ /dev/null
@@ -1,39 +0,0 @@
-## Example using `Window.write_event_value`
-
-In July 2020 an important upgrade was added to the multithreaded capabilities of PySimpleGUI. Gone are the requirements to poll for incoming messages from threads. Now "events" from threads are received through the normal event loop.
-
-The technique has several benefits including:
-
-1. Efficiency - Polling is inefficient. Removing the polling added back a lot of CPI time
-2. Simplicity - Communicating between a window and a thread is a single function call, `Window.write_event_value`
-3. Encapsulation - The actual communication between the thread and the user's application is encapsulated within PySimpleGUI itself using a `queue.Queue` object.
-
-This specific demo shows a couple of newer features in addition to the `write_event_value` call. It also shows how the routing of `cprint` calls can be accomplished by the `Multiline` definition itself.
-
-### Communicating Between Thread and Event Loop
-
-The most important line of code in this entire program is this one:
-
-```python
-window.write_event_value('-THREAD-', (threading.current_thread().name, i))
-```
-
-This call will cause an event to be generated and is read in the event loop when the main program calls `window.read()`.
-
-In this example, the event that will be generated is `'-THREAD-'`
-The values dictionary will also have an entry associated with that "key". In this call we passed a tuple with the values:
-```python
-(threading.current_thread().name, i)
-```
-
-The first entry in the tuple is the name that Python assigned the thread. The second part of the tuple is a counter. You will see these values in the output window in red.
-
-
-### Screenshot on Windows
-
-On windows, the output looks something like this:
-
-
-
-
-
diff --git a/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md b/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
deleted file mode 100644
index 46b8d0df..00000000
--- a/docs/eCookbook/multi-threaded/window-perform_long_operation-method.md
+++ /dev/null
@@ -1,37 +0,0 @@
-## Easing into threading
-
-I'm assuming you're on this page because you've learned something new.... that calling a lengthy function from a GUI is not a straightforward operation if you want a good user experience.
-
-At some point in your GUI programming you're likely to run into this common, but distressing, problem of dealing with lengthy operations in a way that feels good to the user.
-
-The PySimpleGUI Cookbook doing into this in much more detail in this section about multi-threading:
-
-https://pysimplegui.readthedocs.io/en/latest/cookbook/#recipe-long-operations-multi-threading
-
-### Threading with some help...
-
-To get you over the initial hump of multi-threaded programming, you can let PySimpleGUI create and manage threads for you. Like other APIs in PySimpleGUI, it's been simplified down as far as possible.
-
-Here's the basic steps using `perform_long_operation`:
-
-1. Pass your function name and a key to the call to `window.perform_long_operation`
-2. Continue running your GUI event loop
-3. Windows pend using their typical `window.read()` call
-4. You will get the event when your function returns
-5. The values dictionary will contain your function's return value. They key will be the same as the event. So, `values[event]` is your function's return value.
-
-### Detailed Example
-
-In this example, your long operation takes a full 15 seconds.... an eternity when you're waiting with a GUI that is not operating during that timeframe.
-
-In this Trinket you're given 2 basic ways of performing your long operations:
-1. "Go" Button - This will directly call your function
-2. "Threaded" Button - This will use a thread to make the call
-
-Use the "Dummy" button to generate events to see if a window is responding to your clicks and typing. Try moving the window as well. You won't be able to when directly calling the function here on Trinket. You'll be able to on Windows, Linux, Mac, but not here on Trinket because of how titlebars are implemented. The details aren't important. What's important is that your window is not happy when you directly call your function.
-
-
-
-
-
-
diff --git a/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md b/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
deleted file mode 100644
index c0aa48c2..00000000
--- a/docs/eCookbook/multiple-windows/multiple-window-2-window-basic-design-pattern.md
+++ /dev/null
@@ -1,4 +0,0 @@
-**Running Multiple Windows in PySimpleGUI**
-
-
-
diff --git a/docs/eCookbook/multiple-windows/read-all-windows.md b/docs/eCookbook/multiple-windows/read-all-windows.md
deleted file mode 100644
index 67404058..00000000
--- a/docs/eCookbook/multiple-windows/read-all-windows.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## "Read All Windows" - The easist multi-window approach
-
-Beginning in release 4.27.4 / 4.28.0 you'll find a new function `read_all_windows`. This function makes it possible to run multiple windows simultaneously without the requirement of running them with a timeout of the read call.
-
-The concept / function is simple. Instead of reading a window and getting back the event and values for that window, you call `read_all_windows` and get back the window, event, and values for the window that caused the event.
-
-This architecture makes the transition from a single to multiple windows much easier as the event loop remains exactly the same what you're used to for a single window.
-
-The demo program shows 2 windows that are both "live". Each window is capable of modifying the other. There is no timeout call made on the read, but the capability is there should you wish it put a timeout on the read all windows call.
-
-
-
diff --git a/docs/eCookbook/multiple-windows/two-windows-with-re-open.md b/docs/eCookbook/multiple-windows/two-windows-with-re-open.md
deleted file mode 100644
index 05655afd..00000000
--- a/docs/eCookbook/multiple-windows/two-windows-with-re-open.md
+++ /dev/null
@@ -1,13 +0,0 @@
-## Multiple Windows - Re-open Capability
-
-This demo uses the `read_all_windows` function (avilable only on the tkinter port currently)
-
-Each window has the ability to update the other. Additionally, Window 1 has a button to re-open Window 2 should you close Window 2.
-
-Here is how the program looks on Windows
-
-
-
-
-
-
diff --git a/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md b/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
deleted file mode 100644
index 854f1860..00000000
--- a/docs/eCookbook/side-by-side-comparison/quiz-example-from-geekforgeeks.md
+++ /dev/null
@@ -1,33 +0,0 @@
-## Comparing PySimpleGUI with tkinter
-
-These are a fun exercise to go through... compare a tkinter solution to a problem with a PySimpleGUI solution. I like doing them because I'm basically copying an image of a window. It's easier to work on a problem when an image of the solution is provided.
-
-A number of sites have excellent problems for Python programmers to work through. Creating is how programming is learned. Project-based learning is perhaps the best way to learn to program because you're directly applying what you've learned and often you're adding something new to your knowledge as well.
-
-This problem is from the GeekforGeeks website.
-
-https://www.geeksforgeeks.org/python-mcq-quiz-game-using-tkinter/
-
-
-
-As explained on the website, the data for the quiz is located in file named data.json.
-
-### The PySimpleGUI Solution
-
-Because I wanted to duplicate the window exactly, the normal PySimpleGUI themes were bypassed and the default gray was used.
-
-The only part of the window that's been hard coded is the width of the title across the top. This was made extra wide to match the tkinter solution's hard coded window size. Rather than hard coding the entire window size, the preferred PySimpleGUI technique is to allow PySimpleGUI to fit the window to the content's size. If you want a larger window, then the best way to do that is to make the contents bigger.
-
-For spacing, the pad parameter could have been used, but to keep the program simple, I decided to simply add a Text element with spaces onto rows. It's more readable for the user and has no actual downside.
-
-The code is significantly shorter... The actual lines of code is 35. The tkinter version has 75. Some of this is due to the json package being wrapped by PySimpleGUI in the UserSettings API. There is a lot of whitespace in the tkinter version, so counting lines in the file is definitately not fair as the tkinter version is 219 lines and the PySimpleGUI version is 47 lines.
-
-
-
-
-
-
-### The tkinter Solution
-
-
-
diff --git a/docs/eCookbook/tables/mono-spaced-fonts.md b/docs/eCookbook/tables/mono-spaced-fonts.md
deleted file mode 100644
index 13911c5c..00000000
--- a/docs/eCookbook/tables/mono-spaced-fonts.md
+++ /dev/null
@@ -1,27 +0,0 @@
-## Mono-Spaced Fonts
-
-Let's start tables using text.
-
-One common problem when working with text and tables is how to get columns to align properly. Most fonts, including the default font, are variable spaced.... each character is a slightly different width than others.
-
-Here's an example using the font used on this webpage. Each of these rows of character are 10 chars long. But, they are clearly different lengths.
-
-
-1234567890
-aaaaaaaaaa
-iiiiiiiiii
-
-
-What to do? Entry our friend the mono-spaced font where each character takes up the exact same width as all the other characters. The most common of these mono-spaced fonts is "Courier". These same rows of characters, when formatted using a Courier font have the same length:
-
-```
-1234567890
-aaaaaaaaaa
-iiiiiiiiii
-```
-
-Now let's try this out in a PySimpleGUI program.
-
-This program presents a table in a Multiline element using a default font, which will have variable spaces. As you will initially see, the table is a mess. But, by changing the font of the Multiline to a Courier font, the table become tidy and clear.
-
-
diff --git a/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md b/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
deleted file mode 100644
index eb6ce0d3..00000000
--- a/docs/eCookbook/tables/navigate-using-arrow-keys-sort-by-column.md
+++ /dev/null
@@ -1,15 +0,0 @@
-A "Mini-Excel" Table
-
-Can be used to:
-* Display numeric data
-* Use arrow keys to move around the table
-* Click on a header to sort table using that column (Column header will be bolded)
-
-On a Windows machine, the window appears like this:
-
-
-
-Clicking on one of the Column Headers (A - F) will cause the entire table to be sorted using that column as the key
-
-
-
diff --git a/docs/eCookbook/tables/simulated-tables.md b/docs/eCookbook/tables/simulated-tables.md
deleted file mode 100644
index 757b7e87..00000000
--- a/docs/eCookbook/tables/simulated-tables.md
+++ /dev/null
@@ -1,16 +0,0 @@
-
-"Simulated" Tables - Tables that are constructred using other Elements than the Table Element
-
-In this case it's simply some Text and InputText Elements combined.
-
-Here is what the window looks like on Windows
-
-
-
-
-This is a subset of the larger Table Simulation program that you'll also find on Trinket. This smaller demo shows a table and enables moving around with arrow keys.
-
-The larger demo includes the ability to sort columns. The reason for 2 demos.... make one that's smaller in case that's what you need. It removes the need for you to strip out unwanted code and you can instead begin to add your code to this smaller base of code.
-
-
-
\ No newline at end of file
diff --git a/docs/eCookbook/tables/table-element-getting-click-events.md b/docs/eCookbook/tables/table-element-getting-click-events.md
deleted file mode 100644
index d29d80bc..00000000
--- a/docs/eCookbook/tables/table-element-getting-click-events.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Table Element
-
-## Click Events
-
-In relerase 4.48.0 a new parameter was added for all those Table Element fans out there.
-
-The boolean parameter `enable_click_events` in the Table element enables clicks of individual cells and the table headers to be detected and returned to you. This is exactly what's needed if you want to sort your table by columns for example.
-
-This example code can also be found in the Demo Programs section on the PySimpleGUI GitHub at http://demos.PySimpleGUI.org
-
-The Demo Program is named `Demo_Table_Element_Header_or_Cell_Clicks.py`
-
-Here's the demo code ready for you to run. Try clicking on the Column Headers to sort by that column.
-
-500
-
diff --git a/docs/eCookbook/tables/the-table-element.md b/docs/eCookbook/tables/the-table-element.md
deleted file mode 100644
index fc191f68..00000000
--- a/docs/eCookbook/tables/the-table-element.md
+++ /dev/null
@@ -1,9 +0,0 @@
-The Table Element
-
-The `Table` Element is one of the more complex of the elements because there are so many things that are configured when the table is created. In a single line of code everything that is needed to build and display a table including headings, colors, colors, etc, are specified in the parameters passed when creating a `Table`.
-
-This is what the window looks like when run on Windows.
-
-
-
-
diff --git a/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md b/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
deleted file mode 100644
index b3382c6a..00000000
--- a/docs/eCookbook/text/multiline-text-output-with-multiple-colors.md
+++ /dev/null
@@ -1,6 +0,0 @@
-The ability to output text in multiple colors has been a long-requested feature for PySimpleGUI. It's finally here.
-
-It should be noted that it does not use ANSI codes embedded into strings in order to accomplish this. Instead you specify the colors when you send the text to the `Multiline` element via its `update` method.
-
-
-
diff --git a/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md b/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
deleted file mode 100644
index f2d95c72..00000000
--- a/docs/eCookbook/udemy-course-master-pysimplegui/udemy-course.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Udemy Course - "The Official PySimpleGUI Course"
-
-Released on Christmas 2021, [The Official PySimpleGUI Course](https://www.udemy.com/PySimpleGUI) is a 61 lesson course that covers PySimpleGUI in great detail. You'll learn the architecture, and be taught each element individually, in a way that enables you to skip around in the course.
-
-Trinket is being used for the Exercises that accompany the lessons. March 2022 is the expected timeline for the addition of the exercises. They're still being worked on.
-
-## Coupons
-
-[The PySimpleGUI documentation](http://www.PySimpleGUI.org) contains a coupon good for a discount on the course.
-
-## Supporting the PySimpleGUI Project
-
-The Udemy course is by far the best way you financially support the PySimpleGUI project. Of course direct donations via GitHub Sponsorship, BuyMeACoffee, etc, are another easy and effective way of helping keep the project alive.
-
-## Example Exercise
-
-You can check out one of the course's excises with this link. This exercise is for the lesson on the Image element.
-
-https://pysimpleguiudemy.herokuapp.com/Demo/Lesson37.php?password=demo
-
-Most of the Udemy Lessons now have exercises for you to complete after you've watched the lesson. Because Trinket is being used, you'll be able to write and execute PySimpleGUI code in your browser. I'm not aware of other GUI video courses that have exercises as part of the course that don't require you to have a local Python environment up and running.
diff --git a/docs/eCookbook/user-settings/ini-files.md b/docs/eCookbook/user-settings/ini-files.md
deleted file mode 100644
index 5c862ae7..00000000
--- a/docs/eCookbook/user-settings/ini-files.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## UserSettings APIs
-
-In addition to the JSON file format, new in release 4.50.0 is the support of INI files.
-
-This file format is a little different than JSON. INI Files have a concept of "Sections" where JSON does not. In PySimpleGUI the UserSettings API calls and use of the `UserSettings` object are very similar.
-
-This demo shows how to use the UserSettings obiject to interface with these INI files. It's as easy as this to write a setting value:
-
-```python
-settings = sg.UserSettings(use_config_file=True)
-settings['Section']['setting'] = 'Some Value'
-```
-
-And reading is just as easy:
-
-```python
-value = settings['Section']['setting']
-```
-
-
-
-
-
-
diff --git a/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md b/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
deleted file mode 100644
index eec77b07..00000000
--- a/docs/eCookbook/user-settings/usersettings-as-a-simple-database.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## UserSettings as a Simple Database
-
-The UserSettings API can be used to store data like you would find in a database. Each entry in a UserSetting entry is a key to some data. In the case of this databsae example, that data is another dictionary that contains infomation about the entry.
-
-Tbis Demo Program shows a simple database that uses a "User ID" as the key, and there are a number of informational fields associated with each UserID. This informatoin is stored as a dictionary to make accessing the data simple.
-
-
-
diff --git a/docs/eCookbook/user-submitted-examples/language-selection.md b/docs/eCookbook/user-submitted-examples/language-selection.md
deleted file mode 100644
index 8a6317f0..00000000
--- a/docs/eCookbook/user-submitted-examples/language-selection.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## Language Selection
-
-This example program come to us from GitHub user [jerrylususu](https://github.com/jerrylususu). You'll find the repo for this project here:
-
-https://github.com/jerrylususu/PySimpleGUI-Demo-LangSelect
-
-
-
diff --git a/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md b/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
deleted file mode 100644
index da7d3391..00000000
--- a/docs/eCookbook/window-colors-and-graphics/base64-button-graphics.md
+++ /dev/null
@@ -1,16 +0,0 @@
-Changing your buttons from plain rectangular GUI buttons to graphic images is very easy in PySimpleGUI.
-
-Button graphics are specified when creating the Button, inside of your layout.
-
-This is what the code below looks like running on Windows.
-
-
-
-
-
-
-This particular button graphic is larger than it needs to be. It should have been edited prior to use in the program. The size of the button as specified in the code is huge in comparison to the screenshot above. Removing the `image_subsamble=8` from the Button creation you'll see the full size of the button graphic.
-
-By the way, the `image_subsample` value indicated how much to "divide" the size by. The value of "8" specified above means to use 1/8 the size of the original. If the value was "2" then 1/2 of the original size will be shown.
-
-
diff --git a/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md b/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
deleted file mode 100644
index e9db212a..00000000
--- a/docs/eCookbook/window-colors-and-graphics/color-chooser-window.md
+++ /dev/null
@@ -1,33 +0,0 @@
-A "Color Picker" or "Color Chooser"
-
-These selection windows are usually provided by the GUI framework. But let's say you wanted to replace the normal system one. One way to do it is using a grid of colored buttons.
-
-This code demonstrates:
-* Use of ttk buttons - they have beter highlighting then normal tk buttons
-* Setting border=0, padding=(0,0) and no_titlebar - makes a very minimal look
-* `Buttons`, like `Text`, do not need a text parameter filled in. It defaults to `''`
-
-Here is how the window looks running on Windows
-
-
-
-Setting the button size to (None, None) results in an extremely compact version
-
-
-
-A Qt version was easy to make. It required changing the import to `PySimpleGUIQt` and couple of tweaks to parameters. With the Qt version it's possible to specify Button sizes in pixels so it's possible to get the specific size you're seeking. In this case 20x20 pixel squares w3ere used.
-
-
-
-The same code even works on PySimpleGUIWeb
-
-
-
-And finally, the red-headed step-child port PySimpleGUIWx has no problem displying the window
-
-
-
-
-
-
-
diff --git a/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md b/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
deleted file mode 100644
index de99ecfd..00000000
--- a/docs/eCookbook/window-colors-and-graphics/fade-in-fade-out-notification-windows.md
+++ /dev/null
@@ -1,15 +0,0 @@
-Show a "Notification Window"
-
-This is a very clever bit of code that was submitted by a PySimpleGUI user. It shows a "toaster" style of window (doesn't slide up/down but instead fades in/out). You can click on the notification window and it will immediately dismiss it.
-
-The fade-in/fade-out effects are not visible on Trinket but are if you download the code and run on your computer.
-
-This program demonstrates:
-* Computing screensize for placement of window
-* Using a no_titlebar setting to create a clean window that doesn't look like a "normal window"
-* Alpha channel used to fade window in and out
-* Embeds icons into the code itself thus removing the need for multiple files. Makes it possible to copy and paste the program into your code to add the feature.
-* Use of `Element.Widget` member variable to extend the PySimpleGUI feature set by directly accessing a tkinter setting. Used to create the "hand" cursor when mouse is over window
-* Using a single Graph Element to draw an entire window, placing graphics and text in a very precise manner. The entire window is a single Graph Element
-
-
From c6e13e5ddba54523bd20f753e66243696cd2137b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 3 Jul 2022 12:13:24 -0400
Subject: [PATCH 094/467] New Udemy Coupon & picking up latest PySimpleGUI SDK
API calls
---
docs/call reference.md | 32 ++++++++++++-------
docs/cookbook.md | 4 +--
docs/index.md | 4 +--
.../markdown input files/1_HEADER_top_part.md | 4 +--
readme_creator/output/call reference.md | 32 ++++++++++++-------
readme_creator/output/index.md | 4 +--
6 files changed, 48 insertions(+), 32 deletions(-)
diff --git a/docs/call reference.md b/docs/call reference.md
index 5b769deb..23b879e6 100644
--- a/docs/call reference.md
+++ b/docs/call reference.md
@@ -5301,6 +5301,7 @@ Listbox(values,
size = (None, None),
s = (None, None),
disabled = False,
+ justification = None,
auto_size_text = None,
font = None,
no_scrollbar = False,
@@ -5341,6 +5342,7 @@ Parameter Descriptions:
| (int, int) or (int, None) or int | size | w=characters-wide, h=rows-high. If an int instead of a tuple is supplied, then height is auto-set to 1 |
| (int, int) or (None, None) or int | s | Same as size parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, size will be used |
| bool | disabled | set disable state for element |
+| str | justification | justification for items in listbox. Valid choices - left, right, center. Default is left |
| bool | auto_size_text | True if element should be the same size as the contents |
| (str or (str, int[, str]) or None) | font | specifies the font family, size, etc. Tuple or Single string format 'name size styles'. Styles: italic * roman bold normal underline overstrike |
| bool | no_scrollbar | Controls if a scrollbar should be shown. If True, no scrollbar will be shown |
@@ -14455,16 +14457,18 @@ Align an element or a row of elements to the bottom of the row that contains it
```
vbottom(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vcenter to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the bottom or list of elements (a row)
Align an element or a row of elements to the center of the row that contains it
@@ -14472,16 +14476,18 @@ Align an element or a row of elements to the center of the row that contains it
```
vcenter(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vcenter to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the center or list of elements (a row)
Align an element or a row of elements to the top of the row that contains it
@@ -14489,16 +14495,18 @@ Align an element or a row of elements to the top of the row that contains it
```
vtop(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vtop to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the top or list of elements (a row)
-----------------
diff --git a/docs/cookbook.md b/docs/cookbook.md
index 412b44c8..d43ca31b 100644
--- a/docs/cookbook.md
+++ b/docs/cookbook.md
@@ -25,9 +25,9 @@
apply coupon for discount:
- 8D57E54186ADB10C4180
+ D11B305A347585E7A915
-
+
click here to visit course page
diff --git a/docs/index.md b/docs/index.md
index af47adfe..b27082f5 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -25,9 +25,9 @@
apply coupon for discount:
- 8D57E54186ADB10C4180
+ D11B305A347585E7A915
-
+
click here to visit course page
diff --git a/readme_creator/markdown input files/1_HEADER_top_part.md b/readme_creator/markdown input files/1_HEADER_top_part.md
index c9836616..61cd4ac6 100644
--- a/readme_creator/markdown input files/1_HEADER_top_part.md
+++ b/readme_creator/markdown input files/1_HEADER_top_part.md
@@ -52,9 +52,9 @@ HOW DO I INSERT IMAGES ???
apply coupon for discount:
- 8D57E54186ADB10C4180
+ D11B305A347585E7A915
-
+
click here to visit course page
diff --git a/readme_creator/output/call reference.md b/readme_creator/output/call reference.md
index 5b769deb..23b879e6 100644
--- a/readme_creator/output/call reference.md
+++ b/readme_creator/output/call reference.md
@@ -5301,6 +5301,7 @@ Listbox(values,
size = (None, None),
s = (None, None),
disabled = False,
+ justification = None,
auto_size_text = None,
font = None,
no_scrollbar = False,
@@ -5341,6 +5342,7 @@ Parameter Descriptions:
| (int, int) or (int, None) or int | size | w=characters-wide, h=rows-high. If an int instead of a tuple is supplied, then height is auto-set to 1 |
| (int, int) or (None, None) or int | s | Same as size parameter. It's an alias. If EITHER of them are set, then the one that's set will be used. If BOTH are set, size will be used |
| bool | disabled | set disable state for element |
+| str | justification | justification for items in listbox. Valid choices - left, right, center. Default is left |
| bool | auto_size_text | True if element should be the same size as the contents |
| (str or (str, int[, str]) or None) | font | specifies the font family, size, etc. Tuple or Single string format 'name size styles'. Styles: italic * roman bold normal underline overstrike |
| bool | no_scrollbar | Controls if a scrollbar should be shown. If True, no scrollbar will be shown |
@@ -14455,16 +14457,18 @@ Align an element or a row of elements to the bottom of the row that contains it
```
vbottom(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vcenter to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the bottom or list of elements (a row)
Align an element or a row of elements to the center of the row that contains it
@@ -14472,16 +14476,18 @@ Align an element or a row of elements to the center of the row that contains it
```
vcenter(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vcenter to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the center or list of elements (a row)
Align an element or a row of elements to the top of the row that contains it
@@ -14489,16 +14495,18 @@ Align an element or a row of elements to the top of the row that contains it
```
vtop(elem_or_row,
expand_x = None,
- expand_y = None)
+ expand_y = None,
+ background_color = None)
```
Parameter Descriptions:
|Type|Name|Meaning|
|--|--|--|
-| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
-| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
-| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| Element or List[Element] or Tuple[Element] | elem_or_row | the element or row of elements |
+| bool | expand_x | If True/False the value will be passed to the Column Elements used to make this feature |
+| bool | expand_y | If True/False the value will be passed to the Column Elements used to make this feature |
+| str or None | background_color | Background color for container that is used by vtop to do the alignment |
| Column or List[Column] | **RETURN** | A column element containing the provided element aligned to the top or list of elements (a row)
-----------------
diff --git a/readme_creator/output/index.md b/readme_creator/output/index.md
index af47adfe..b27082f5 100644
--- a/readme_creator/output/index.md
+++ b/readme_creator/output/index.md
@@ -25,9 +25,9 @@
apply coupon for discount:
- 8D57E54186ADB10C4180
+ D11B305A347585E7A915
-
+
click here to visit course page
From f8188f68ab9ffe9b1870ddfb85825e2907d7c88b Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 3 Jul 2022 12:16:14 -0400
Subject: [PATCH 095/467] Test harness - setting dictionary multline made
write-only, new coupon code.
---
PySimpleGUI.py | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/PySimpleGUI.py b/PySimpleGUI.py
index aea2c581..8f909672 100644
--- a/PySimpleGUI.py
+++ b/PySimpleGUI.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-version = __version__ = "4.60.0.52 Unreleased"
+version = __version__ = "4.60.0.53 Unreleased"
_change_log = """
Changelog since 4.60.0 released to PyPI on 8-May-2022
@@ -129,7 +129,8 @@ _change_log = """
vcenter and vbottom - added USING the expand_x and expand_y parms that were already defined. (HOPE NOTHING BREAKS!)
4.60.0.52
justification parameter added to Listbox (default is left.. can be right and center now too)
-
+ 4.60.0.53
+ Made settings dictionary multiline in test harness write-only. New coupon code
"""
__version__ = version.split()[0] # For PEP 396 and PEP 345
@@ -25039,7 +25040,7 @@ def _create_main_window():
frame6 = [[VPush()],[graph_elem]]
global_settings_tab_layout = [[T('Settings Filename:'), T(pysimplegui_user_settings.full_filename, s=(50,2))],
- [T('Settings Dictionary:'), MLine(pysimplegui_user_settings, size=(50,8))],
+ [T('Settings Dictionary:'), MLine(pysimplegui_user_settings, size=(50,8), write_only=True)],
]
themes_tab_layout = [[T('You can see a preview of the themes, the color swatches, or switch themes for this window')],
@@ -25200,7 +25201,7 @@ def main():
# webbrowser.open_new_tab(r'https://udemy.com/PySimpleGUI')
webbrowser.open_new_tab(r'https://www.buymeacoffee.com/PySimpleGUI')
elif event in ('-EMOJI-HEARTS-', '-HEART-', '-PYTHON HEARTS-'):
- popup_scrolled("Oh look! It's a Udemy discount coupon!", '8D57E54186ADB10C4180',
+ popup_scrolled("Oh look! It's a Udemy discount coupon!", 'D11B305A347585E7A915',
'A personal message from Mike -- thank you so very much for supporting PySimpleGUI!', title='Udemy Coupon', image=EMOJI_BASE64_MIKE, keep_on_top=True)
elif event == 'Themes':
@@ -25336,7 +25337,6 @@ if running_windows():
print('Error using the taskbar icon patch', e)
-
_read_mac_global_settings()
# if running_mac():
# print('Your Mac patches are:')
@@ -25345,6 +25345,9 @@ _read_mac_global_settings()
# print('No grab anywhere allowed with titlebar:', ENABLE_MAC_DISABLE_GRAB_ANYWHERE_WITH_TITLEBAR)
# print('Currently the no titlebar patch ' + ('WILL' if _mac_should_apply_notitlebar_patch() else 'WILL NOT') + ' be applied')
+
+
+
# -------------------------------- ENTRY POINT IF RUN STANDALONE -------------------------------- #
if __name__ == '__main__':
# To execute the upgrade from command line, type:
@@ -25357,4 +25360,4 @@ if __name__ == '__main__':
exit(0)
main()
exit(0)
-#81c3d611f0876569b714bfead31610fd397248595b3b2ebc96bd33600bbcbdcce50013a4f1471a65a24bc8b842b82e0c2083023fe4a9db7d76763f46b34df27cc47d5d27f38eaeec8824af4291b6cc9f53ccb9e4b73a37f3a6b6feb8a726076b105241559fd328fd30f3684e18dacc74c19fdb45077d4ef644fbfd9e7307063246f400f1765357036297d6d6dc9ab74593e6cfd8a0eb5449eea36fd76a65f46953ddbb992b54966e537aa735ff44ee7df9234163669a318e1d2aa8d530673fb0fb8ef3871ce280f977d29de0ec04e7eac393eb9bce1452d9e666de6b0391ba7f3f03395fed40586fa494611127a188a4a13cf703e20118da73a8ba33c17297f2f0b7f44b2677216786b5b32479021b03d233379c66d75aa971e5dd5b497f0759a014f2bb8fbed86ea30fb32fd49a9f1b2f53f6fd61e7e4f265e6a501e675f805079a6a1a2e5394d49bf8fa3911562d8f1c999f8775f0ad818e1e0f421c12190d426b49c426adbe84a0a5433e82b265407eea9758d283770069e854128d1ce66b66de7f59256920d1297076ea9560675f7950c24ab3bd2f60ad317ef8e8013ca06ce44802ddb44df756c35f312c34b0dd1b5e02cd2f947dfba588c90c7c3a366dbae4036bceb0c7ce18301ec5e7157212374939bc6e0ec22f7c1927ede9bbbb3e57b10c8fc39301492f47fe32d71361fe24400ea3be0c92de94e990d62d8ac662
\ No newline at end of file
+#55f8010029c6b5063311eff93cca8cefb486cb37b0e5721e89e645de041dee13e953b114549d101e3e254577174bab2d68bf2a4d0701a62cc9c3debd2d60034ce0c83d4babffcc98010b4f9b87189ebdc46e1d69371b9d757b5953cfcd7ec0751ff52c5624ac8f20c0b837db683f1016b3101fe642715d30ea9a8d68c4f7cc877e15884cedcd02fa57e7ccf20e73a84f5590441f243861b95636cf59551eedfb5904fb45c16b38597fedfe1840d88ae5395656874a15c63423705c6c6a9f386ab26086735648723ea8c8c574000bd53b0ce5385f2eed3570df54536f52e967cfb602731103afa45f58c0853c877790e83d7ddc6f4118c05d9ad1b07938e9c5267c85f921b6a7e017fe3c9135c965fc9d7767d108e75c6bed7b16af94215d7d69c8377a7894651aa0be327e8f862fd699983bfac48a1e37f84067c14a1477d740655bbe59bea73569e49b3298a37c466b6b7f2b23c19b985ccbc1cf8f46826cad1f8f28cc8ef716c68774fa87066a15c70f27d7d3f40ebe3ab8172a2171cf0fa2dd641767d339c5ecb6f4e108f033392f21ea03a788267164168168c2038f9409e82dd1afe8756992a6c889e29368973521be6d57f98ab4b1314e51d8618046aa9c0c6d53ed702b5b5479ffb217d95b8434e4cb81a2c1f9a70f6725ccb30f619208ab051e79d6a9bab54f8d7df17fbeeae5dc55a7f1ab8da016af685b4f870b50
\ No newline at end of file
From 86bab67f83c46c822ade719bb8bd5aac7a33cb66 Mon Sep 17 00:00:00 2001
From: PySimpleGUI
Date: Sun, 3 Jul 2022 12:33:23 -0400
Subject: [PATCH 096/467] New coupon
---
docs/readme.md | 4 ++--
readme.md | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/readme.md b/docs/readme.md
index 222c849b..89aefea4 100644
--- a/docs/readme.md
+++ b/docs/readme.md
@@ -9,8 +9,8 @@