Merge pull request #3820 from PySimpleGUI/Dev-latest

files_delimiter added to FilesBrowse button & popup_get_file, metadat…
This commit is contained in:
PySimpleGUI 2021-01-21 20:25:36 -05:00 committed by GitHub
commit cd4f1a02f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 72 additions and 27 deletions

View File

@ -1,5 +1,5 @@
#!/usr/bin/python3 #!/usr/bin/python3
version = __version__ = "4.34.0.2 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search" version = __version__ = "4.34.0.3 Unreleased\nSDK Help Expanded to init & update parms, SDK Help function search, files_delimiter added to FilesBrowse & popup_get_file"
__version__ = version.split()[0] # For PEP 396 and PEP 345 __version__ = version.split()[0] # For PEP 396 and PEP 345
@ -570,7 +570,7 @@ BUTTON_TYPE_CALENDAR_CHOOSER = 30
BUTTON_TYPE_COLOR_CHOOSER = 40 BUTTON_TYPE_COLOR_CHOOSER = 40
BUTTON_TYPE_SHOW_DEBUGGER = 50 BUTTON_TYPE_SHOW_DEBUGGER = 50
BROWSE_FILES_DELIMITER = ';' # the delimeter to be used between each file in the returned string BROWSE_FILES_DELIMITER = ';' # the delimiter to be used between each file in the returned string
# ------------------------- Element types ------------------------- # # ------------------------- Element types ------------------------- #
@ -3394,6 +3394,7 @@ class Button(Element):
self.Disabled = disabled self.Disabled = disabled
self.ChangeSubmits = change_submits or enable_events self.ChangeSubmits = change_submits or enable_events
self.UseTtkButtons = use_ttk_buttons self.UseTtkButtons = use_ttk_buttons
self._files_delimiter = BROWSE_FILES_DELIMITER # used by the file browse button. used when multiple files are selected by user
if sys.platform.startswith('darwin'): if sys.platform.startswith('darwin'):
self.UseTtkButtons = True self.UseTtkButtons = True
# if image_filename or image_data: # if image_filename or image_data:
@ -3558,7 +3559,7 @@ class Button(Element):
else: else:
file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot) file_name = tk.filedialog.askopenfilenames(filetypes=filetypes, initialdir=self.InitialFolder, parent=self.ParentForm.TKroot)
if file_name: if file_name:
file_name = BROWSE_FILES_DELIMITER.join(file_name) # normally a ';' file_name = self._files_delimiter.join(file_name) # normally a ';'
strvar.set(file_name) strvar.set(file_name)
self.TKStringVar.set(file_name) self.TKStringVar.set(file_name)
elif self.BType == BUTTON_TYPE_SAVEAS_FILE: elif self.BType == BUTTON_TYPE_SAVEAS_FILE:
@ -10033,6 +10034,8 @@ def FolderBrowse(button_text='Browse', target=(ThisRow, -1), initial_folder=None
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: The Button created :return: The Button created
:rtype: (Button) :rtype: (Button)
""" """
@ -10078,6 +10081,8 @@ def FileBrowse(button_text='Browse', target=(ThisRow, -1), file_types=(("ALL Fil
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10091,10 +10096,9 @@ def FileBrowse(button_text='Browse', target=(ThisRow, -1), file_types=(("ALL Fil
def FilesBrowse(button_text='Browse', target=(ThisRow, -1), file_types=(("ALL Files", "*.*"),), disabled=False, def FilesBrowse(button_text='Browse', target=(ThisRow, -1), file_types=(("ALL Files", "*.*"),), disabled=False,
initial_folder=None, tooltip=None, size=(None, None), auto_size_button=None, button_color=None, initial_folder=None, tooltip=None, size=(None, None), auto_size_button=None, button_color=None,
change_submits=False, enable_events=False, change_submits=False, enable_events=False,
font=None, pad=None, key=None, k=None, metadata=None): font=None, pad=None, key=None, k=None, files_delimiter=BROWSE_FILES_DELIMITER, metadata=None):
""" """
Allows browsing of multiple files. File list is returned as a single list with the delimeter defined using the variable Allows browsing of multiple files. File list is returned as a single list with the delimiter defined using the files_delimiter parameter.
BROWSE_FILES_DELIMETER. This defaults to ';' but is changable by the user
:param button_text: text in the button (Default value = 'Browse') :param button_text: text in the button (Default value = 'Browse')
:type button_text: (str) :type button_text: (str)
@ -10125,13 +10129,19 @@ def FilesBrowse(button_text='Browse', target=(ThisRow, -1), file_types=(("ALL Fi
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param files_delimiter: String to place between files when multiple files are selected. Normally a ;
:type files_delimiter: str
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
return Button(button_text=button_text, button_type=BUTTON_TYPE_BROWSE_FILES, target=target, file_types=file_types, button = Button(button_text=button_text, button_type=BUTTON_TYPE_BROWSE_FILES, target=target, file_types=file_types,
initial_folder=initial_folder, change_submits=change_submits, enable_events=enable_events, initial_folder=initial_folder, change_submits=change_submits, enable_events=enable_events,
tooltip=tooltip, size=size, auto_size_button=auto_size_button, tooltip=tooltip, size=size, auto_size_button=auto_size_button,
disabled=disabled, button_color=button_color, font=font, pad=pad, key=key, k=k, metadata=metadata) disabled=disabled, button_color=button_color, font=font, pad=pad, key=key, k=k, metadata=metadata)
button._files_delimiter = files_delimiter
return button
# ------------------------- FILE BROWSE Element lazy function ------------------------- # # ------------------------- FILE BROWSE Element lazy function ------------------------- #
@ -10172,6 +10182,8 @@ def FileSaveAs(button_text='Save As...', target=(ThisRow, -1), file_types=(("ALL
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10219,6 +10231,8 @@ def SaveAs(button_text='Save As...', target=(ThisRow, -1), file_types=(("ALL Fil
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10257,6 +10271,8 @@ def Save(button_text='Save', size=(None, None), auto_size_button=None, button_co
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10294,6 +10310,8 @@ def Submit(button_text='Submit', size=(None, None), auto_size_button=None, butto
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10332,6 +10350,8 @@ def Open(button_text='Open', size=(None, None), auto_size_button=None, button_co
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10369,6 +10389,8 @@ def OK(button_text='OK', size=(None, None), auto_size_button=None, button_color=
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10406,6 +10428,8 @@ def Ok(button_text='Ok', size=(None, None), auto_size_button=None, button_color=
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10442,6 +10466,8 @@ def Cancel(button_text='Cancel', size=(None, None), auto_size_button=None, butto
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10478,6 +10504,8 @@ def Quit(button_text='Quit', size=(None, None), auto_size_button=None, button_co
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10514,6 +10542,8 @@ def Exit(button_text='Exit', size=(None, None), auto_size_button=None, button_co
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10550,6 +10580,8 @@ def Yes(button_text='Yes', size=(None, None), auto_size_button=None, button_colo
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10586,6 +10618,8 @@ def No(button_text='No', size=(None, None), auto_size_button=None, button_color=
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10622,6 +10656,8 @@ def Help(button_text='Help', size=(None, None), auto_size_button=None, button_co
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10707,6 +10743,8 @@ def SimpleButton(button_text, image_filename=None, image_data=None, image_size=(
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10755,6 +10793,8 @@ def CloseButton(button_text, image_filename=None, image_data=None, image_size=(N
:type key: str | int | tuple | object :type key: str | int | tuple | object
:param k: Same as the Key. You can use either k or key. Which ever is set will be used. :param k: Same as the Key. You can use either k or key. Which ever is set will be used.
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button
:type metadata: (Any)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -10892,6 +10932,8 @@ def DummyButton(button_text, image_filename=None, image_data=None, image_size=(N
:type image_size: (Default = (None)) :type image_size: (Default = (None))
:param image_subsample:amount to reduce the size of the image :param image_subsample:amount to reduce the size of the image
:type image_subsample: amount to reduce the size of the image :type image_subsample: amount to reduce the size of the image
:param border_width: width of border around element
:type border_width: (int)
:param tooltip: text, that will appear when mouse hovers over the element :param tooltip: text, that will appear when mouse hovers over the element
:type tooltip: (str) :type tooltip: (str)
:param size: (w,h) w=characters-wide, h=rows-high :param size: (w,h) w=characters-wide, h=rows-high
@ -10916,8 +10958,6 @@ def DummyButton(button_text, image_filename=None, image_data=None, image_size=(N
:type k: str | int | tuple | object :type k: str | int | tuple | object
:param metadata: Anything you want to store along with this button :param metadata: Anything you want to store along with this button
:type metadata: (Any) :type metadata: (Any)
:param border_width: width of border around element
:type border_width: (int)
:return: returns a button :return: returns a button
:rtype: (Button) :rtype: (Button)
""" """
@ -15280,7 +15320,8 @@ def popup(*args, title=None, button_color=None, background_color=None, text_colo
# window.finalize() # window.finalize()
# window.make_modal() # window.make_modal()
button, values = window.read() button, values = window.read()
window.close(); del window window.close()
del window
return button return button
@ -15391,7 +15432,8 @@ def popup_scrolled(*args, title=None, button_color=None, background_color=None,
button, values = window.Read(timeout=0) button, values = window.Read(timeout=0)
else: else:
button, values = window.Read() button, values = window.Read()
window.close(); del window window.close()
del window
return button return button
@ -15497,7 +15539,7 @@ def popup_non_blocking(*args, title=None, button_type=POPUP_BUTTONS_OK, button_c
:rtype: str | None :rtype: str | None
""" """
return Popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_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,
@ -15554,7 +15596,7 @@ def popup_quick(*args, title=None, button_type=POPUP_BUTTONS_OK, button_color=No
:rtype: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
return Popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_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,
@ -15607,7 +15649,7 @@ def popup_quick_message(*args, title=None, button_type=POPUP_BUTTONS_NO_BUTTONS,
: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: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
return Popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_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,
@ -15658,7 +15700,7 @@ def popup_no_titlebar(*args, title=None, button_type=POPUP_BUTTONS_OK, button_co
: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: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
return Popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_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,
@ -15715,7 +15757,7 @@ def popup_auto_close(*args, title=None, button_type=POPUP_BUTTONS_OK, button_col
:rtype: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
return Popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_color=button_color, background_color=background_color, text_color=text_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,
@ -15770,7 +15812,7 @@ def popup_error(*args, title=None, button_color=(None, None), background_color=N
:rtype: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
tbutton_color = DEFAULT_ERROR_BUTTON_COLOR if button_color == (None, None) else button_color tbutton_color = DEFAULT_ERROR_BUTTON_COLOR if button_color == (None, None) else button_color
return Popup(*args, title=title, button_type=POPUP_BUTTONS_ERROR, background_color=background_color, text_color=text_color, return popup(*args, title=title, button_type=POPUP_BUTTONS_ERROR, background_color=background_color, text_color=text_color,
non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=tbutton_color, non_blocking=non_blocking, icon=icon, line_width=line_width, button_color=tbutton_color,
auto_close=auto_close, 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,
@ -15821,7 +15863,7 @@ def popup_cancel(*args, title=None, button_color=None, background_color=None, te
: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: str | None | TIMEOUT_KEY :rtype: str | None | TIMEOUT_KEY
""" """
return Popup(*args, title=title, button_type=POPUP_BUTTONS_CANCELLED, background_color=background_color, return popup(*args, title=title, button_type=POPUP_BUTTONS_CANCELLED, background_color=background_color,
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,
@ -15872,7 +15914,7 @@ def popup_ok(*args, title=None, button_color=None, background_color=None, text_c
: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: str | None | TIMEOUT_KEY :rtype: 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, image=image, modal=modal) keep_on_top=keep_on_top, location=location, image=image, modal=modal)
@ -15922,7 +15964,7 @@ def popup_ok_cancel(*args, title=None, button_color=None, background_color=None,
:return: clicked button :return: clicked button
:rtype: "OK" | "Cancel" | None :rtype: "OK" | "Cancel" | None
""" """
return Popup(*args, title=title, button_type=POPUP_BUTTONS_OK_CANCEL, background_color=background_color, return popup(*args, title=title, button_type=POPUP_BUTTONS_OK_CANCEL, background_color=background_color,
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,
@ -15973,7 +16015,7 @@ def popup_yes_no(*args, title=None, button_color=None, background_color=None, te
:return: clicked button :return: clicked button
:rtype: "Yes" | "No" | None :rtype: "Yes" | "No" | None
""" """
return Popup(*args, title=title, button_type=POPUP_BUTTONS_YES_NO, background_color=background_color, return popup(*args, title=title, button_type=POPUP_BUTTONS_YES_NO, background_color=background_color,
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,
@ -16102,7 +16144,7 @@ def popup_get_file(message, title=None, default_path='', default_extension='', s
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, image=None, modal=True): location=(None, None), initial_folder=None, image=None, files_delimiter=BROWSE_FILES_DELIMITER, modal=True):
""" """
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.
@ -16146,6 +16188,8 @@ def popup_get_file(message, title=None, default_path='', default_extension='', s
:type initial_folder: (str) :type initial_folder: (str)
:param image: Image to include at the top of the popup window :param image: Image to include at the top of the popup window
:type image: (str) or (bytes) :type image: (str) or (bytes)
:param files_delimiter: String to place between files when multiple files are selected. Normally a ;
:type files_delimiter: str
:param modal: If True then makes the popup will behave like a Modal window... all other windows are non-operational until this one is closed. Default = True :param modal: If True then makes the popup will behave like a Modal window... all other windows are non-operational until this one is closed. Default = True
:type modal: bool :type modal: bool
: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
@ -16215,7 +16259,7 @@ def popup_get_file(message, title=None, default_path='', default_extension='', s
if save_as: if save_as:
browse_button = SaveAs(file_types=file_types, initial_folder=initial_folder) browse_button = SaveAs(file_types=file_types, initial_folder=initial_folder)
elif multiple_files: elif multiple_files:
browse_button = FilesBrowse(file_types=file_types, initial_folder=initial_folder) browse_button = FilesBrowse(file_types=file_types, initial_folder=initial_folder, files_delimiter=files_delimiter)
else: else:
browse_button = FileBrowse(file_types=file_types, initial_folder=initial_folder) browse_button = FileBrowse(file_types=file_types, initial_folder=initial_folder)
@ -16307,7 +16351,8 @@ def popup_get_text(message, title=None, default_text='', password_char='', size=
button, values = window.Read() button, values = window.Read()
window.close(); del window window.close()
del window
if button != 'Ok': if button != 'Ok':
return None return None
else: else:
@ -16349,7 +16394,7 @@ def popup_get_date(start_mon=None, start_day=None, start_year=None, begin_at_sun
:param modal: If True then makes the popup will behave like a Modal window... all other windows are non-operational until this one is closed. Default = True :param modal: If True then makes the popup will behave like a Modal window... all other windows are non-operational until this one is closed. Default = True
:type modal: bool :type modal: bool
:return: Tuple containing (month, day, year) of chosen date or None if was cancelled :return: Tuple containing (month, day, year) of chosen date or None if was cancelled
:rtype: None or (int, int, int) :rtype: None | (int, int, int)
""" """
if month_names is not None and len(month_names) != 12: if month_names is not None and len(month_names) != 12:
@ -16491,8 +16536,8 @@ def popup_animated(image_source, message=None, background_color=None, text_color
event loop is running every 10 ms. You don't have to worry about delaying, just call it every time through the event loop is running every 10 ms. You don't have to worry about delaying, just call it every time through the
loop. loop.
:param image_source: Either a filename or a base64 string. :param image_source: Either a filename or a base64 string. Use None to close the window.
:type image_source: str | bytes :type image_source: str | bytes | None
:param message: An optional message to be shown with the animation :param message: An optional message to be shown with the animation
:type message: (str) :type message: (str)
:param background_color: color of background :param background_color: color of background