From 3022748ec70ecf482a0652beeb834b675e99f611 Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Sat, 14 Dec 2019 23:33:44 -0500 Subject: [PATCH 1/2] Release 4.12 --- PySimpleGUI.py | 28 +++++++-------- docs/index.md | 97 +++++++++++++++++++++++++++++++++----------------- readme.md | 97 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 144 insertions(+), 78 deletions(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 0ec8ed2a..ff6919ab 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -version = __version__ = "4.11.0.5 Unreleased - ability to set disabled colors for buttons (tk + ttk), popup no more closebutton use, browse cancel fix for linux, highlight thickness=0" +version = __version__ = "4.12.0 Released 14-Dec-2019" port = 'PySimpleGUI' @@ -11188,7 +11188,7 @@ def Popup(*args, title=None, button_color=None, background_color=None, text_colo button, values = window.Read(timeout=0) else: button, values = window.Read() - window.close() + window.close(); del window return button @@ -11263,7 +11263,7 @@ def PopupScrolled(*args, title=None, button_color=None, background_color=None, t button, values = window.Read(timeout=0) else: button, values = window.Read() - window.close() + window.close(); del window return button @@ -11708,7 +11708,7 @@ def PopupGetFolder(message, title=None, default_path='', no_window=False, size=( location=location) button, values = window.Read() - window.Close() + window.close(); del window if button != 'Ok': return None else: @@ -11806,7 +11806,7 @@ def PopupGetFile(message, title=None, default_path='', default_extension='', sav no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) button, values = window.Read() - window.Close() + window.close(); del window if button != 'Ok': return None else: @@ -11849,7 +11849,7 @@ def PopupGetText(message, title=None, default_text='', password_char='', size=(N location=location) button, values = window.Read() - window.Close() + window.close(); del window if button != 'Ok': return None else: @@ -11905,7 +11905,7 @@ def PopupAnimated(image_source, message=None, background_color=None, text_color= window = Window.animated_popup_dict[image_source] window.Element('_IMAGE_').UpdateAnimation(image_source, time_between_frames=time_between_frames) - window.read(timeout=10) # call refresh instead of Read to save significant CPU time + window.refresh() # call refresh instead of Read to save significant CPU time ##################################################################################################### @@ -12206,21 +12206,21 @@ class _Debugger(): cur_col += 1 ScrolledTextBox(out_text, non_blocking=True) - ##### # # + ##### # # # # # # #### #### #### ###### # # # ## ##### #### # # # # # # # # # # # # # # # # # # # # # # ###### # # # # #### ##### # # # # # # # ###### # # # # # # # # # # # # ###### # # # # # # # # # # # # # # # # # # # # # # # # # - ##### # # #### #### #### ###### ## ## # # # #### # # + ##### # # #### #### #### ###### ## ## # # # #### # # # # # # # # ## ##### # ## ##### # ###### #### # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # # ##### # ##### #### # # # # # # # - # # ###### ##### # ###### # # # # # # # # # # # # - # # # # # # # # # # # # # # # # # # # # ## - # # # # # # # # ##### ###### ###### #### ## ## # # # + # # ###### ##### # ###### # # # # # # # # # # # # + # # # # # # # # # # # # # # # # # # # # ## + # # # # # # # # ##### ###### ###### #### ## ## # # # def _choose_auto_watches(self, my_locals): """ @@ -12297,7 +12297,7 @@ class _Debugger(): # # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # ## # # # # ## ## - ## ## # # # ##### #### # # + ## ## # # # ##### #### # # def _build_floating_window(self, location=(None, None)): """ @@ -12378,7 +12378,7 @@ class _Debugger(): # # # # # # # # # # # # # # # # # # # # # # # # # ## # # # # # # ## # # # # ## ## - ## ## # # # ##### #### # # + ## ## # # # ##### #### # # def _refresh_floating_window(self): """ """ diff --git a/docs/index.md b/docs/index.md index 906b6977..58e0e70f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,7 +14,7 @@ ![Awesome Meter](https://img.shields.io/badge/Awesome_meter-100-yellow.svg) ![Python Version](https://img.shields.io/badge/Python-2.7_3.x-yellow.svg) -![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.11.0-red.svg?longCache=true&style=for-the-badge) +![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.12.0-red.svg?longCache=true&style=for-the-badge) ![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-2.4.1-blue.svg?longCache=true&style=for-the-badge) ![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0.30.0-orange.svg?longCache=true&style=for-the-badge) @@ -5424,6 +5424,7 @@ Button(button_text="", size=(None, None), auto_size_button=None, button_color=None, + disabled_button_color=None, use_ttk_buttons=None, font=None, bind_return_key=False, @@ -5455,6 +5456,7 @@ Parameter Descriptions: |size|Tuple[int, int] (width, height) of the button in characters wide, rows high| |auto_size_button|(bool) if True the button size is sized to fit the text| |button_color|Tuple[str, str] (text color, background color) of button. Easy to remember which is which if you say "ON" between colors. "red" on "green".| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |use_ttk_buttons|(bool) True = use ttk buttons. False = do not use ttk buttons. None (Default) = use ttk buttons only if on a Mac and not with button images| |font|Union[str, Tuple[str, int]] specifies the font family, size, etc| |bind_return_key|(bool) If True the return key will cause this button to be pressed| @@ -5523,6 +5525,7 @@ Update(text=None, image_filename=None, visible=None, image_subsample=None, + disabled_button_color=(None, None), image_size=None) ``` @@ -5535,6 +5538,7 @@ Parameter Descriptions: |disabled|(bool) disable or enable state of the element| |image_data|Union[bytes, str] Raw or Base64 representation of the image to put on button. Choose either filename or data| |image_filename|(str) image filename if there is a button image. GIFs and PNGs only.| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |visible|(bool) control visibility of element| |image_subsample|(int) amount to reduce the size of the image. Divides the size by this number. 2=1/2, 3=1/3, 4=1/4, etc| |image_size|Tuple[int, int] Size of the image in pixels (width, height)| @@ -5687,6 +5691,7 @@ update(text=None, image_filename=None, visible=None, image_subsample=None, + disabled_button_color=(None, None), image_size=None) ``` @@ -5699,6 +5704,7 @@ Parameter Descriptions: |disabled|(bool) disable or enable state of the element| |image_data|Union[bytes, str] Raw or Base64 representation of the image to put on button. Choose either filename or data| |image_filename|(str) image filename if there is a button image. GIFs and PNGs only.| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |visible|(bool) control visibility of element| |image_subsample|(int) amount to reduce the size of the image. Divides the size by this number. 2=1/2, 3=1/3, 4=1/4, etc| |image_size|Tuple[int, int] Size of the image in pixels (width, height)| @@ -14307,6 +14313,8 @@ call and then have that same source run on plain PySimpleGUI. |---|---| | **return** | | +## Function Reference + ``` CButton(button_text, image_filename=None, @@ -15021,6 +15029,39 @@ Parameter Descriptions: ||| | **return** | (Button) | +``` +Open(button_text="Open", + size=(None, None), + auto_size_button=None, + button_color=None, + disabled=False, + bind_return_key=True, + tooltip=None, + font=None, + focus=False, + pad=None, + key=None, + metadata=None) +``` + +Parameter Descriptions: + +|Name|Meaning| +|---|---| +|button_text|text in the button (Default value = 'Open')| +|size|(w,h) w=characters-wide, h=rows-high| +|auto_size_button|True if button size is determined by button text| +|button_color|button color (foreground, background)| +|disabled|set disable state for element (Default = False)| +|bind_return_key|(Default = True)| +|tooltip|(str) text, that will appear when mouse hovers over the element| +|font|specifies the font family, size, etc| +|focus|if focus should be set to this| +|pad|Amount of padding to put around element| +|key|Used with window.FindElement and with return values to uniquely identify this element| + +## OneLineProgressMeter + ``` OneLineProgressMeter(title, current_value, @@ -15061,36 +15102,7 @@ Parameter Descriptions: |---|---| |key|Used with window.FindElement and with return values to uniquely identify this element| -``` -Open(button_text="Open", - size=(None, None), - auto_size_button=None, - button_color=None, - disabled=False, - bind_return_key=True, - tooltip=None, - font=None, - focus=False, - pad=None, - key=None, - metadata=None) -``` - -Parameter Descriptions: - -|Name|Meaning| -|---|---| -|button_text|text in the button (Default value = 'Open')| -|size|(w,h) w=characters-wide, h=rows-high| -|auto_size_button|True if button size is determined by button text| -|button_color|button color (foreground, background)| -|disabled|set disable state for element (Default = False)| -|bind_return_key|(Default = True)| -|tooltip|(str) text, that will appear when mouse hovers over the element| -|font|specifies the font family, size, etc| -|focus|if focus should be set to this| -|pad|Amount of padding to put around element| -|key|Used with window.FindElement and with return values to uniquely identify this element| +## Popup Functions Popup - Display a popup Window with as many parms as you wish to include. This is the GUI equivalent of the "print" statement. It's also great for "pausing" your program's flow until the user can read some error messages. @@ -16453,6 +16465,8 @@ Parameter Descriptions: ||| | **return** | (Button) | +## PEP8 Function Bindings + Change the "color scheme" of all future PySimpleGUI Windows. The scheme are string names that specify a group of colors. Background colors, text colors, button colors. There are 13 different color settings that are changed at one time using a single call to ChangeLookAndFeel @@ -16634,6 +16648,8 @@ Parameter Descriptions: |---|---| |key|Used with window.FindElement and with return values to uniquely identify this element| +## Popups + Popup - Display a popup Window with as many parms as you wish to include. This is the GUI equivalent of the "print" statement. It's also great for "pausing" your program's flow until the user can read some error messages. @@ -18981,7 +18997,24 @@ The Element & Window bindings release * Window.bind - New method for Windows, just like Elements * Enables tkinter bindings to be added to Windows * Will get an event returned from window.read() if the tkinter event happens -* TabGround fonts - can now set the font and font size for Tab text +* TabGroup fonts - can now set the font and font size for Tab text + +## 4.12.0 PySimpleGUI 14-Dec-2019 + +Finally no more outlines around TK Elements on Linux + +* Fixed a long-term problem of the mysterious white border around (almost) all TK Elements on Linux +* Ability to set the disabled button colors + * New Button and Button.update parameter - disabled_button_color + * Specified as (Text Color, Background Color) just like button colors + * For Normal / TK Buttons - can set button text color only + * For TTK Buttons - can set both a disabled button and text color + * Either parameter can be None to use current setting +* Removed use of CloseButton from Popups (still have a bug in the CloseButton code but not in popups now) +* Combobox - removed requirement of setting disabled if want to set to readonly using update method +* Fix for cancelling out of file/folder browse on Linux caused target to be cleared instead of just cancelling +* Removed try block around setting button colors - if user sets a bad color, well don't do that +* Now deleting windows after closing them for popup ### Upcoming diff --git a/readme.md b/readme.md index 906b6977..58e0e70f 100644 --- a/readme.md +++ b/readme.md @@ -14,7 +14,7 @@ ![Awesome Meter](https://img.shields.io/badge/Awesome_meter-100-yellow.svg) ![Python Version](https://img.shields.io/badge/Python-2.7_3.x-yellow.svg) -![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.11.0-red.svg?longCache=true&style=for-the-badge) +![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_3.x_Version-4.12.0-red.svg?longCache=true&style=for-the-badge) ![Python Version](https://img.shields.io/badge/PySimpleGUI_For_Python_2.7_Version-2.4.1-blue.svg?longCache=true&style=for-the-badge) ![Python Version](https://img.shields.io/badge/PySimpleGUIQt_Version-0.30.0-orange.svg?longCache=true&style=for-the-badge) @@ -5424,6 +5424,7 @@ Button(button_text="", size=(None, None), auto_size_button=None, button_color=None, + disabled_button_color=None, use_ttk_buttons=None, font=None, bind_return_key=False, @@ -5455,6 +5456,7 @@ Parameter Descriptions: |size|Tuple[int, int] (width, height) of the button in characters wide, rows high| |auto_size_button|(bool) if True the button size is sized to fit the text| |button_color|Tuple[str, str] (text color, background color) of button. Easy to remember which is which if you say "ON" between colors. "red" on "green".| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |use_ttk_buttons|(bool) True = use ttk buttons. False = do not use ttk buttons. None (Default) = use ttk buttons only if on a Mac and not with button images| |font|Union[str, Tuple[str, int]] specifies the font family, size, etc| |bind_return_key|(bool) If True the return key will cause this button to be pressed| @@ -5523,6 +5525,7 @@ Update(text=None, image_filename=None, visible=None, image_subsample=None, + disabled_button_color=(None, None), image_size=None) ``` @@ -5535,6 +5538,7 @@ Parameter Descriptions: |disabled|(bool) disable or enable state of the element| |image_data|Union[bytes, str] Raw or Base64 representation of the image to put on button. Choose either filename or data| |image_filename|(str) image filename if there is a button image. GIFs and PNGs only.| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |visible|(bool) control visibility of element| |image_subsample|(int) amount to reduce the size of the image. Divides the size by this number. 2=1/2, 3=1/3, 4=1/4, etc| |image_size|Tuple[int, int] Size of the image in pixels (width, height)| @@ -5687,6 +5691,7 @@ update(text=None, image_filename=None, visible=None, image_subsample=None, + disabled_button_color=(None, None), image_size=None) ``` @@ -5699,6 +5704,7 @@ Parameter Descriptions: |disabled|(bool) disable or enable state of the element| |image_data|Union[bytes, str] Raw or Base64 representation of the image to put on button. Choose either filename or data| |image_filename|(str) image filename if there is a button image. GIFs and PNGs only.| +|disabled_button_color|Tuple[str, str] colors to use when button is disabled (text, background). Use None for a color if don't want to change. Only ttk buttons support both text and background colors. tk buttons only support changing text color| |visible|(bool) control visibility of element| |image_subsample|(int) amount to reduce the size of the image. Divides the size by this number. 2=1/2, 3=1/3, 4=1/4, etc| |image_size|Tuple[int, int] Size of the image in pixels (width, height)| @@ -14307,6 +14313,8 @@ call and then have that same source run on plain PySimpleGUI. |---|---| | **return** | | +## Function Reference + ``` CButton(button_text, image_filename=None, @@ -15021,6 +15029,39 @@ Parameter Descriptions: ||| | **return** | (Button) | +``` +Open(button_text="Open", + size=(None, None), + auto_size_button=None, + button_color=None, + disabled=False, + bind_return_key=True, + tooltip=None, + font=None, + focus=False, + pad=None, + key=None, + metadata=None) +``` + +Parameter Descriptions: + +|Name|Meaning| +|---|---| +|button_text|text in the button (Default value = 'Open')| +|size|(w,h) w=characters-wide, h=rows-high| +|auto_size_button|True if button size is determined by button text| +|button_color|button color (foreground, background)| +|disabled|set disable state for element (Default = False)| +|bind_return_key|(Default = True)| +|tooltip|(str) text, that will appear when mouse hovers over the element| +|font|specifies the font family, size, etc| +|focus|if focus should be set to this| +|pad|Amount of padding to put around element| +|key|Used with window.FindElement and with return values to uniquely identify this element| + +## OneLineProgressMeter + ``` OneLineProgressMeter(title, current_value, @@ -15061,36 +15102,7 @@ Parameter Descriptions: |---|---| |key|Used with window.FindElement and with return values to uniquely identify this element| -``` -Open(button_text="Open", - size=(None, None), - auto_size_button=None, - button_color=None, - disabled=False, - bind_return_key=True, - tooltip=None, - font=None, - focus=False, - pad=None, - key=None, - metadata=None) -``` - -Parameter Descriptions: - -|Name|Meaning| -|---|---| -|button_text|text in the button (Default value = 'Open')| -|size|(w,h) w=characters-wide, h=rows-high| -|auto_size_button|True if button size is determined by button text| -|button_color|button color (foreground, background)| -|disabled|set disable state for element (Default = False)| -|bind_return_key|(Default = True)| -|tooltip|(str) text, that will appear when mouse hovers over the element| -|font|specifies the font family, size, etc| -|focus|if focus should be set to this| -|pad|Amount of padding to put around element| -|key|Used with window.FindElement and with return values to uniquely identify this element| +## Popup Functions Popup - Display a popup Window with as many parms as you wish to include. This is the GUI equivalent of the "print" statement. It's also great for "pausing" your program's flow until the user can read some error messages. @@ -16453,6 +16465,8 @@ Parameter Descriptions: ||| | **return** | (Button) | +## PEP8 Function Bindings + Change the "color scheme" of all future PySimpleGUI Windows. The scheme are string names that specify a group of colors. Background colors, text colors, button colors. There are 13 different color settings that are changed at one time using a single call to ChangeLookAndFeel @@ -16634,6 +16648,8 @@ Parameter Descriptions: |---|---| |key|Used with window.FindElement and with return values to uniquely identify this element| +## Popups + Popup - Display a popup Window with as many parms as you wish to include. This is the GUI equivalent of the "print" statement. It's also great for "pausing" your program's flow until the user can read some error messages. @@ -18981,7 +18997,24 @@ The Element & Window bindings release * Window.bind - New method for Windows, just like Elements * Enables tkinter bindings to be added to Windows * Will get an event returned from window.read() if the tkinter event happens -* TabGround fonts - can now set the font and font size for Tab text +* TabGroup fonts - can now set the font and font size for Tab text + +## 4.12.0 PySimpleGUI 14-Dec-2019 + +Finally no more outlines around TK Elements on Linux + +* Fixed a long-term problem of the mysterious white border around (almost) all TK Elements on Linux +* Ability to set the disabled button colors + * New Button and Button.update parameter - disabled_button_color + * Specified as (Text Color, Background Color) just like button colors + * For Normal / TK Buttons - can set button text color only + * For TTK Buttons - can set both a disabled button and text color + * Either parameter can be None to use current setting +* Removed use of CloseButton from Popups (still have a bug in the CloseButton code but not in popups now) +* Combobox - removed requirement of setting disabled if want to set to readonly using update method +* Fix for cancelling out of file/folder browse on Linux caused target to be cleared instead of just cancelling +* Removed try block around setting button colors - if user sets a bad color, well don't do that +* Now deleting windows after closing them for popup ### Upcoming From fad54cf29af04a63dc7ba078fc7ff945af800411 Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Sat, 14 Dec 2019 23:33:57 -0500 Subject: [PATCH 2/2] Initial Check-in --- UserCreatedPrograms/Minesweeper.py | 229 +++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 UserCreatedPrograms/Minesweeper.py diff --git a/UserCreatedPrograms/Minesweeper.py b/UserCreatedPrograms/Minesweeper.py new file mode 100644 index 00000000..963520f5 --- /dev/null +++ b/UserCreatedPrograms/Minesweeper.py @@ -0,0 +1,229 @@ +import PySimpleGUI as sg +import random + +''' +Source code of MineSweeper Game +''' + +blank = b'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAA5SURBVEhL7c0xAQAgDMTABynVU7MohAUN6ZJbMmbV6ZsB+xfnGOMY4xjjGOMY4xjjGOMY4xgzNE4euGMCWklhg+IAAAAASUVORK5CYII=' +bomb = b'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' +flag = b'iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAE9ElEQVR4nL2WTWxUVRTHf+fe+147pbQKFChUipREKUYEEhAT2SgGNP0IpkkXsDCwIWHVdMWGuDEkRIwJC+OCEQkbiCB2ISQkiiHRlCIsnBqirZCWr1JqKRPBmXn3uJg37bR0qNHqP3nJzP363XPOPedeUVURESUvAbRlTf0zodWGocePrl3ovZeO+0KgAngAFMY7wDMhib9cUVsIZIr+o6pipkBpe7UuIWQuOOu/r51T/jbwprX2hDHmJ2NMyhhzVUQ+rK2tXeacyznnvHPOG2M8EMVQsda+IyKfAXOL1wcQERWKtB8MQOqVpTseRdH+c6mhPg9bmCJjDLlcbgT4CPgauAsEZWVlz2cymc0i0gysBUa89yuAsYKxxa4plgD6+Y6X5yS7b9258OtIZexKLbhRRDSKIr9x40bX3NxMTU0Nt2/f/iOZTAbXr18PrLWoKrH1t733rcCP8XxPCQnAx1tXlm1bvbi/PHQRIpExRo0xGgSBioju2bNH0+m0T6fT2YGBAe3v79f79+/rhg0bIhHJOuciY0wuntcRr21LQSfBW9bU/lBdESpIzsZg55wCOjw8rMlkUltbW3Xnzp26adMmr6r+0KFDCmgYhj6GPmCaGE+rtrb8zt5du+TUouqEgmRtkcXOOd27d6+mUim9ePGinjlzRs+fP68DAwPa0NCggDrn1BgTxd858id7EthMBQ8N5QeEVgYTgQF0fIr3nlwux+HDh+nu7iaRSBAEAXV1dTQ2NmKtpby8nCiKIB9PA3xDPp0mudqVstwZO5AIJsbGJ5nOzk6uXLlCT08Ply5dIp1OM2/ePFpaWjh27Bi7du3iyJEjOOckiiJUdR1P5vuTFhcUWBkod/luEYP3nvnz53Pw4EHOnj1LfX09XV1dnD59mqqqKjo7Ozl+/DgLFixAZMKrItJDnNtPtXjhwnyuOSe3yvJggyree6IoYvv27aRSKXbv3k1vby9jY2OMjo7S3NxMX18fxhhEhCiKBEBVXwc+AR7GcJ3W4saT+Y4glDuBNR7EeFUNgoDR0VGGh4e1o6NDV61axYEDB2hqauLo0aMkk0my2Szt7e1473HOeSASkc1ANUXFo5QEYP9bjfPeeHHhiLVGjTG5IAiyIuLb29u1r69P169fr7ELFdDq6mrdt2+fr6+vz4lIZK3VOKV6gFXxuiVDOw4+0dZmt7206JdEvogUFlFghHyJ1DAM1TmXC8MwS75SKaDGGBWRq8aY95g4zU/P41gGoHXNku+enVOmIL9ZkQ+cc69VVlYuAKorKirWicipwoastRqG4Ygx5gtrbQuTz8/fgo4XkdY1tV+9sHjup0BVqZnW2iZjzC5r7RZg4dTuUtBp87hQRECG1j9X/e21Ow/HltVTfuMGGSYOiQAaRVHXNDDI521UyrinBhv0VjqTWw3I8uXkmLiptOi3jQ0oWBcxEe+SmgHMoMUsmmGRwuU/I2xGcKGIqJhBRWuK22ZL08a4UEQM3CSf/Jw8WfoS/yea1uL3Y5f9mcncVaFs68qVZUy8Qv47cEF3E/fui6KJxKOa2QLOBFZALl8mq8LjyEWLAfb/Hxa3teX7BPndqCwF6G2bPXDJh8B4EVEdEqRuUtssaKY8BpFbQN1sAWcEj+etMojo1Br8r1XS1Zwk5upNYMWkzcyCjKpOG7cT8eNMA/kZ+BJmr4ioqvwF0Vn06LBZVccAAAAASUVORK5CYII=' + +font = 'Courier 16 bold' +width = 25 +height = 14 +all = 80 +new_start = True +size = (30,30) +# 0: 0, 1: hidden card, 2: bomb card, 3: flag card, 4: shown card +im = ['', blank, bomb,flag, ''] +color = [('grey', 'grey'), ('black', 'green'), + ('black', 'green'), ('black', 'green'), ('black', 'grey')] + +def binding_all(): # Bind right button of mouse to cell object + + for x in range(width): + for y in range(height): + window[b[x][y].key].bind( + '', '+RIGHT') + +# Setting for top buttons +def button1(text, key=None, disabled=False, button_color=('white', 'green')): + + return sg.Button(text, pad=(10, 10), font=font, focus=False, key=key, + disabled=disabled, button_color=button_color) + +def button2(x, y): # define cell as instance of button and + + b[x][y] = button(x,y) # bulid Button + return b[x][y].button + +def check_blank(x, y): # Check if cell near 0-bomb cel + + if b[x][y].num==0: return False + for i in [-1, 0, 1]: + for j in [-1, 0, 1]: + if i==0 and j==0: continue + if ((0<=x+i