Merge pull request #3093 from PySimpleGUI/Dev-latest

Added image parameter to popups.  Added caching of icons for Trees
This commit is contained in:
PySimpleGUI 2020-07-02 07:45:19 -04:00 committed by GitHub
commit 63695b1d1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 108 additions and 47 deletions

View File

@ -1,6 +1,6 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.22.0.8 Unreleased\n Added a bunch of warnings for windows operations to check for root being None, fix for table and tree colors due to tkinter bug in version 8.6.9, don't call overrideredirect if running on Mac, new shortcut parm k added to all elements (use interachgably with key), moved when 8.6.9 patch is applied, any_key_closes parameter added to popup, image parameter added to popup & popup_error" version = __version__ = "4.22.0.9 Unreleased\n Added a bunch of warnings for windows operations to check for root being None, fix for table and tree colors due to tkinter bug in version 8.6.9, don't call overrideredirect if running on Mac, new shortcut parm k added to all elements (use interachgably with key), moved when 8.6.9 patch is applied, any_key_closes parameter added to popup, image parameter added to popup & popup_error, image parameter added to all popups, added caching to tree icons"
port = 'PySimpleGUI' port = 'PySimpleGUI'
@ -986,6 +986,7 @@ class Element():
except: except:
print('Warning, error hiding element row for key =', self.Key) print('Warning, error hiding element row for key =', self.Key)
def expand(self, expand_x=False, expand_y=False, expand_row=True): def expand(self, expand_x=False, expand_y=False, expand_row=True):
""" """
Causes the Element to expand to fill available space in the X and Y directions. Can specify which or both directions Causes the Element to expand to fill available space in the X and Y directions. Can specify which or both directions
@ -6276,6 +6277,8 @@ class Tree(Element):
to hold the user's data and pass to the element for display. to hold the user's data and pass to the element for display.
""" """
image_dict = {}
def __init__(self, data=None, headings=None, visible_column_map=None, col_widths=None, col0_width=10, def __init__(self, data=None, headings=None, visible_column_map=None, col_widths=None, col0_width=10,
def_col_width=10, auto_size_columns=True, max_col_width=20, select_mode=None, show_expanded=False, def_col_width=10, auto_size_columns=True, max_col_width=20, select_mode=None, show_expanded=False,
change_submits=False, enable_events=False, font=None, justification='right', text_color=None, change_submits=False, enable_events=False, font=None, justification='right', text_color=None,
@ -6403,10 +6406,15 @@ class Tree(Element):
if node.key != '': if node.key != '':
if node.icon: if node.icon:
try: try:
if node.icon not in Tree.image_dict:
if type(node.icon) is bytes: if type(node.icon) is bytes:
photo = tk.PhotoImage(data=node.icon) photo = tk.PhotoImage(data=node.icon)
else: else:
photo = tk.PhotoImage(file=node.icon) photo = tk.PhotoImage(file=node.icon)
Tree.image_dict[node.icon] = photo
else:
photo = Tree.image_dict.get(node.icon)
node.photo = photo node.photo = photo
id = self.TKTreeview.insert(self.KeyToID[node.parent], 'end', iid=None, text=node.text, id = self.TKTreeview.insert(self.KeyToID[node.parent], 'end', iid=None, text=node.text,
values=node.values, open=self.ShowExpanded, image=node.photo) values=node.values, open=self.ShowExpanded, image=node.photo)
@ -11407,10 +11415,16 @@ def PackFormIntoFrame(form, containing_frame, toplevel_form):
# print(f'Inserting {node.key} under parent {node.parent}') # print(f'Inserting {node.key} under parent {node.parent}')
if node.key != '': if node.key != '':
if node.icon: if node.icon:
if node.icon not in Tree.image_dict:
if type(node.icon) is bytes: if type(node.icon) is bytes:
photo = tk.PhotoImage(data=node.icon) photo = tk.PhotoImage(data=node.icon)
else: else:
photo = tk.PhotoImage(file=node.icon) photo = tk.PhotoImage(file=node.icon)
Tree.image_dict[node.icon] = photo
else:
photo = Tree.image_dict.get(node.icon)
node.photo = photo node.photo = photo
id = treeview.insert(element.KeyToID[node.parent], 'end', iid=None, text=node.text, values=node.values, id = treeview.insert(element.KeyToID[node.parent], 'end', iid=None, text=node.text, values=node.values,
open=element.ShowExpanded, image=node.photo) open=element.ShowExpanded, image=node.photo)
@ -14025,7 +14039,7 @@ def Popup(*args, title=None, button_color=None, background_color=None, text_colo
:param title: Optional title for the window. If none provided, the first arg will be used instead. :param title: Optional title for the window. If none provided, the first arg will be used instead.
:type title: (str) :type title: (str)
:param button_color: Color of the buttons shown (text color, button color) :param button_color: Color of the buttons shown (text color, button color)
:type button_color: Tuple[str, str] :type button_color: Union[Tuple[str, str], None]
:param background_color: Window's background color :param background_color: Window's background color
:type background_color: (str) :type background_color: (str)
:param text_color: text color :param text_color: text color
@ -14159,7 +14173,7 @@ def MsgBox(*args):
# ======================== Scrolled Text Box =====# # ======================== Scrolled Text Box =====#
# ===================================================# # ===================================================#
def PopupScrolled(*args, title=None, button_color=None, background_color=None, text_color=None, yes_no=False, auto_close=False, auto_close_duration=None, def PopupScrolled(*args, title=None, button_color=None, background_color=None, text_color=None, yes_no=False, auto_close=False, auto_close_duration=None,
size=(None, None), location=(None, None), non_blocking=False, no_titlebar=False, grab_anywhere=False, keep_on_top=False, font=None): size=(None, None), location=(None, None), non_blocking=False, no_titlebar=False, grab_anywhere=False, keep_on_top=False, font=None, image=None):
""" """
Show a scrolled Popup window containing the user's text that was supplied. Use with as many items to print as you Show a scrolled Popup window containing the user's text that was supplied. Use with as many items to print as you
want, just like a print statement. want, just like a print statement.
@ -14194,6 +14208,8 @@ def PopupScrolled(*args, title=None, button_color=None, background_color=None, t
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param font: specifies the font family, size, etc :param font: specifies the font family, size, etc
:type font: Union[str, Tuple[str, int]] :type font: Union[str, Tuple[str, int]]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14253,7 +14269,7 @@ sprint = ScrolledTextBox
# --------------------------- PopupNoButtons --------------------------- # --------------------------- PopupNoButtons ---------------------------
def PopupNoButtons(*args, title=None, background_color=None, text_color=None, auto_close=False, def PopupNoButtons(*args, title=None, background_color=None, text_color=None, auto_close=False,
auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None, auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None,
no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)): no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
"""Show a Popup but without any buttons """Show a Popup but without any buttons
:param *args: Variable number of items to display :param *args: Variable number of items to display
@ -14282,21 +14298,22 @@ def PopupNoButtons(*args, title=None, background_color=None, text_color=None, au
:type grab_anywhere: (bool) :type grab_anywhere: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] """ :rtype: Union[str, None, TIMEOUT_KEY] """
Popup(*args, title=title, button_color=None, background_color=background_color, text_color=text_color, Popup(*args, title=title, background_color=background_color, text_color=text_color,
button_type=POPUP_BUTTONS_NO_BUTTONS, button_type=POPUP_BUTTONS_NO_BUTTONS,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupNonBlocking --------------------------- # --------------------------- PopupNonBlocking ---------------------------
def PopupNonBlocking(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None, def PopupNonBlocking(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None,
text_color=None, text_color=None, auto_close=False, auto_close_duration=None, non_blocking=True, icon=None,
auto_close=False, auto_close_duration=None, non_blocking=True, icon=None,
line_width=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False, line_width=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False,
location=(None, None)): location=(None, None), image=None):
""" """
Show Popup window and immediately return (does not block) Show Popup window and immediately return (does not block)
@ -14330,6 +14347,8 @@ def PopupNonBlocking(*args, title=None, button_type=POPUP_BUTTONS_OK, button_col
:type grab_anywhere: (bool) :type grab_anywhere: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Reason for popup closing :return: Reason for popup closing
:rtype: Union[str, None] :rtype: Union[str, None]
""" """
@ -14338,7 +14357,7 @@ def PopupNonBlocking(*args, title=None, button_type=POPUP_BUTTONS_OK, button_col
button_type=button_type, button_type=button_type,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
PopupNoWait = PopupNonBlocking PopupNoWait = PopupNonBlocking
@ -14346,9 +14365,8 @@ PopupNoWait = PopupNonBlocking
# --------------------------- PopupQuick - a NonBlocking, Self-closing Popup --------------------------- # --------------------------- PopupQuick - a NonBlocking, Self-closing Popup ---------------------------
def PopupQuick(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None, def PopupQuick(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None,
text_color=None, text_color=None, auto_close=True, auto_close_duration=2, non_blocking=True, icon=None, line_width=None,
auto_close=True, auto_close_duration=2, non_blocking=True, icon=None, line_width=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)):
""" """
Show Popup box that doesn't block and closes itself Show Popup box that doesn't block and closes itself
@ -14384,6 +14402,8 @@ def PopupQuick(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=Non
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14392,15 +14412,13 @@ def PopupQuick(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=Non
button_type=button_type, button_type=button_type,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupQuick - a NonBlocking, Self-closing Popup with no titlebar and no buttons --------------------------- # --------------------------- PopupQuick - a NonBlocking, Self-closing Popup with no titlebar and no buttons ---------------------------
def PopupQuickMessage(*args, title=None, button_type=POPUP_BUTTONS_NO_BUTTONS, button_color=None, background_color=None, def PopupQuickMessage(*args, title=None, button_type=POPUP_BUTTONS_NO_BUTTONS, button_color=None, background_color=None,
text_color=None, text_color=None, auto_close=True, auto_close_duration=2, non_blocking=True, icon=None, line_width=None,
auto_close=True, auto_close_duration=2, non_blocking=True, icon=None, font=None, no_titlebar=True, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
line_width=None,
font=None, no_titlebar=True, grab_anywhere=False, keep_on_top=False, location=(None, None)):
""" """
Show Popup window with no titlebar, doesn't block, and auto closes itself. Show Popup window with no titlebar, doesn't block, and auto closes itself.
@ -14436,6 +14454,8 @@ def PopupQuickMessage(*args, title=None, button_type=POPUP_BUTTONS_NO_BUTTONS, b
:type grab_anywhere: (bool) :type grab_anywhere: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14443,14 +14463,13 @@ def PopupQuickMessage(*args, title=None, button_type=POPUP_BUTTONS_NO_BUTTONS, b
button_type=button_type, button_type=button_type,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupNoTitlebar --------------------------- # --------------------------- PopupNoTitlebar ---------------------------
def PopupNoTitlebar(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None, def PopupNoTitlebar(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None,
text_color=None, text_color=None, auto_close=False, auto_close_duration=None, non_blocking=False, icon=None,
auto_close=False, auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None, grab_anywhere=True, keep_on_top=False, location=(None, None), image=None):
line_width=None, font=None, grab_anywhere=True, keep_on_top=False, location=(None, None)):
""" """
Display a Popup without a titlebar. Enables grab anywhere so you can move it Display a Popup without a titlebar. Enables grab anywhere so you can move it
@ -14484,6 +14503,8 @@ def PopupNoTitlebar(*args, title=None, button_type=POPUP_BUTTONS_OK, button_colo
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14491,7 +14512,7 @@ def PopupNoTitlebar(*args, title=None, button_type=POPUP_BUTTONS_OK, button_colo
button_type=button_type, button_type=button_type,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=True, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=True, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
PopupNoFrame = PopupNoTitlebar PopupNoFrame = PopupNoTitlebar
@ -14500,11 +14521,10 @@ PopupAnnoying = PopupNoTitlebar
# --------------------------- PopupAutoClose --------------------------- # --------------------------- PopupAutoClose ---------------------------
def PopupAutoClose(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None, def PopupAutoClose(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=None, background_color=None, text_color=None,
text_color=None,
auto_close=True, auto_close_duration=None, non_blocking=False, icon=None, auto_close=True, auto_close_duration=None, non_blocking=False, icon=None,
line_width=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False, line_width=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False,
location=(None, None)): location=(None, None), image=None):
"""Popup that closes itself after some time period """Popup that closes itself after some time period
:param *args: Variable number of items to display :param *args: Variable number of items to display
@ -14539,6 +14559,8 @@ def PopupAutoClose(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14547,7 +14569,7 @@ def PopupAutoClose(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color
button_type=button_type, button_type=button_type,
auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon, auto_close=auto_close, auto_close_duration=auto_close_duration, non_blocking=non_blocking, icon=icon,
line_width=line_width, line_width=line_width,
font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
PopupTimed = PopupAutoClose PopupTimed = PopupAutoClose
@ -14606,7 +14628,7 @@ def PopupError(*args, title=None, button_color=(None, None), background_color=No
# --------------------------- PopupCancel --------------------------- # --------------------------- PopupCancel ---------------------------
def PopupCancel(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False, def PopupCancel(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False,
auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None, auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None,
no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)): no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
""" """
Display Popup with "cancelled" button text Display Popup with "cancelled" button text
@ -14640,6 +14662,8 @@ def PopupCancel(*args, title=None, button_color=None, background_color=None, tex
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
@ -14647,13 +14671,13 @@ def PopupCancel(*args, title=None, button_color=None, background_color=None, tex
text_color=text_color, text_color=text_color,
non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, auto_close=auto_close, non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, auto_close=auto_close,
auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
keep_on_top=keep_on_top, location=location) keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupOK --------------------------- # --------------------------- PopupOK ---------------------------
def PopupOK(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False, def PopupOK(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False,
auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None, auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None,
no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)): no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
""" """
Display Popup with OK button only Display Popup with OK button only
@ -14687,19 +14711,21 @@ def PopupOK(*args, title=None, button_color=None, background_color=None, text_co
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Returns text of the button that was pressed. None will be returned if user closed window with X :return: Returns text of the button that was pressed. None will be returned if user closed window with X
:rtype: Union[str, None, TIMEOUT_KEY] :rtype: Union[str, None, TIMEOUT_KEY]
""" """
return Popup(*args, title=title, button_type=POPUP_BUTTONS_OK, background_color=background_color, text_color=text_color, return Popup(*args, title=title, button_type=POPUP_BUTTONS_OK, background_color=background_color, text_color=text_color,
non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, auto_close=auto_close, non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, auto_close=auto_close,
auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, grab_anywhere=grab_anywhere,
keep_on_top=keep_on_top, location=location) keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupOKCancel --------------------------- # --------------------------- PopupOKCancel ---------------------------
def PopupOKCancel(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False, def PopupOKCancel(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False,
auto_close_duration=None, non_blocking=False, icon=DEFAULT_WINDOW_ICON, line_width=None, font=None, auto_close_duration=None, non_blocking=False, icon=DEFAULT_WINDOW_ICON, line_width=None, font=None,
no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)): no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
""" """
Display popup with OK and Cancel buttons Display popup with OK and Cancel buttons
@ -14733,6 +14759,8 @@ def PopupOKCancel(*args, title=None, button_color=None, background_color=None, t
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: clicked button :return: clicked button
:rtype: Union["OK", "Cancel", None] :rtype: Union["OK", "Cancel", None]
""" """
@ -14740,13 +14768,13 @@ def PopupOKCancel(*args, title=None, button_color=None, background_color=None, t
text_color=text_color, text_color=text_color,
non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color,
auto_close=auto_close, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, auto_close=auto_close, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar,
grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
# --------------------------- PopupYesNo --------------------------- # --------------------------- PopupYesNo ---------------------------
def PopupYesNo(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False, def PopupYesNo(*args, title=None, button_color=None, background_color=None, text_color=None, auto_close=False,
auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None, auto_close_duration=None, non_blocking=False, icon=None, line_width=None, font=None,
no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None)): no_titlebar=False, grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
""" """
Display Popup with Yes and No buttons Display Popup with Yes and No buttons
@ -14780,6 +14808,8 @@ def PopupYesNo(*args, title=None, button_color=None, background_color=None, text
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: Location of upper left corner of the window :param location: Location of upper left corner of the window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: clicked button :return: clicked button
:rtype: Union["Yes", "No", None] :rtype: Union["Yes", "No", None]
""" """
@ -14787,7 +14817,7 @@ def PopupYesNo(*args, title=None, button_color=None, background_color=None, text
text_color=text_color, text_color=text_color,
non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color, non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=button_color,
auto_close=auto_close, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar, auto_close=auto_close, auto_close_duration=auto_close_duration, font=font, no_titlebar=no_titlebar,
grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location) grab_anywhere=grab_anywhere, keep_on_top=keep_on_top, location=location, image=image)
############################################################################## ##############################################################################
@ -14799,7 +14829,7 @@ def PopupYesNo(*args, title=None, button_color=None, background_color=None, text
def PopupGetFolder(message, title=None, default_path='', no_window=False, size=(None, None), button_color=None, def PopupGetFolder(message, title=None, default_path='', no_window=False, size=(None, None), button_color=None,
background_color=None, text_color=None, icon=None, font=None, no_titlebar=False, background_color=None, text_color=None, icon=None, font=None, no_titlebar=False,
grab_anywhere=False, keep_on_top=False, location=(None, None), initial_folder=None): grab_anywhere=False, keep_on_top=False, location=(None, None), initial_folder=None, image=None):
""" """
Display popup with text entry field and browse button so that a folder can be chosen. Display popup with text entry field and browse button so that a folder can be chosen.
@ -14833,6 +14863,8 @@ def PopupGetFolder(message, title=None, default_path='', no_window=False, size=(
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param initial_folder: location in filesystem to begin browsing :param initial_folder: location in filesystem to begin browsing
:type initial_folder: (str) :type initial_folder: (str)
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: string representing the path chosen, None if cancelled or window closed with X :return: string representing the path chosen, None if cancelled or window closed with X
:rtype: Union[str, None] :rtype: Union[str, None]
""" """
@ -14870,7 +14902,14 @@ def PopupGetFolder(message, title=None, default_path='', no_window=False, size=(
return folder_name return folder_name
layout = [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color)], if image is not None:
if isinstance(image, str):
layout = [[Image(filename=image)]]
else:
layout = [[Image(data=image)]]
else:
layout = [[]]
layout += [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color)],
[InputText(default_text=default_path, size=size, key='_INPUT_'), [InputText(default_text=default_path, size=size, key='_INPUT_'),
FolderBrowse(initial_folder=initial_folder)], FolderBrowse(initial_folder=initial_folder)],
[Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]] [Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]]
@ -14894,7 +14933,7 @@ def PopupGetFile(message, title=None, default_path='', default_extension='', sav
file_types=(("ALL Files", "*.*"),), file_types=(("ALL Files", "*.*"),),
no_window=False, size=(None, None), button_color=None, background_color=None, text_color=None, no_window=False, size=(None, None), button_color=None, background_color=None, text_color=None,
icon=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False, icon=None, font=None, no_titlebar=False, grab_anywhere=False, keep_on_top=False,
location=(None, None), initial_folder=None): location=(None, None), initial_folder=None, image=None):
""" """
Display popup window with text entry field and browse button so that a file can be chosen by user. Display popup window with text entry field and browse button so that a file can be chosen by user.
@ -14936,6 +14975,8 @@ def PopupGetFile(message, title=None, default_path='', default_extension='', sav
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param initial_folder: location in filesystem to begin browsing :param initial_folder: location in filesystem to begin browsing
:type initial_folder: (str) :type initial_folder: (str)
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: string representing the file(s) chosen, None if cancelled or window closed with X :return: string representing the file(s) chosen, None if cancelled or window closed with X
:rtype: Union[str, None] :rtype: Union[str, None]
""" """
@ -14994,7 +15035,16 @@ def PopupGetFile(message, title=None, default_path='', default_extension='', sav
else: else:
browse_button = FileBrowse(file_types=file_types, initial_folder=initial_folder) browse_button = FileBrowse(file_types=file_types, initial_folder=initial_folder)
layout = [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color)],
if image is not None:
if isinstance(image, str):
layout = [[Image(filename=image)]]
else:
layout = [[Image(data=image)]]
else:
layout = [[]]
layout += [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color)],
[InputText(default_text=default_path, size=size, key='_INPUT_'), browse_button], [InputText(default_text=default_path, size=size, key='_INPUT_'), browse_button],
[Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]] [Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]]
@ -15016,7 +15066,7 @@ def PopupGetFile(message, title=None, default_path='', default_extension='', sav
def PopupGetText(message, title=None, default_text='', password_char='', size=(None, None), button_color=None, def PopupGetText(message, title=None, default_text='', password_char='', size=(None, None), button_color=None,
background_color=None, text_color=None, icon=None, font=None, no_titlebar=False, background_color=None, text_color=None, icon=None, font=None, no_titlebar=False,
grab_anywhere=False, keep_on_top=False, location=(None, None)): grab_anywhere=False, keep_on_top=False, location=(None, None), image=None):
""" """
Display Popup with text entry field. Returns the text entered or None if closed / cancelled Display Popup with text entry field. Returns the text entered or None if closed / cancelled
@ -15048,11 +15098,22 @@ def PopupGetText(message, title=None, default_text='', password_char='', size=(N
:type keep_on_top: (bool) :type keep_on_top: (bool)
:param location: (x,y) Location on screen to display the upper left corner of window :param location: (x,y) Location on screen to display the upper left corner of window
:type location: Tuple[int, int] :type location: Tuple[int, int]
:param image: Image to include at the top of the popup window
:type image: (str) or (bytes)
:return: Text entered or None if window was closed or cancel button clicked :return: Text entered or None if window was closed or cancel button clicked
:rtype: Union[str, None] :rtype: Union[str, None]
""" """
layout = [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color, font=font)],
if image is not None:
if isinstance(image, str):
layout = [[Image(filename=image)]]
else:
layout = [[Image(data=image)]]
else:
layout = [[]]
layout += [[Text(message, auto_size_text=True, text_color=text_color, background_color=background_color, font=font)],
[InputText(default_text=default_text, size=size, key='_INPUT_', password_char=password_char)], [InputText(default_text=default_text, size=size, key='_INPUT_', password_char=password_char)],
[Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]] [Button('Ok', size=(6, 1), bind_return_key=True), Button('Cancel', size=(6, 1))]]