From 07bb93d47f01468660a01f42150e87e5cb08d546 Mon Sep 17 00:00:00 2001 From: PySimpleGUI Date: Mon, 4 Apr 2022 09:49:57 -0400 Subject: [PATCH] Addition of tooltip_offset parm to set_options call (major hack to get around 8.6.12 problem). Backed out the experiments to try and fix new problem with Ubuntu --- PySimpleGUI.py | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/PySimpleGUI.py b/PySimpleGUI.py index 9d0548a8..7666536f 100644 --- a/PySimpleGUI.py +++ b/PySimpleGUI.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -version = __version__ = "4.57.0.29 Unreleased" +version = __version__ = "4.57.0.31 Unreleased" _change_log = """ Changelog since 4.57.0 released to PyPI on 13-Feb-2022 @@ -78,6 +78,10 @@ _change_log = """ Removed the need for tk.scrolledtext.ScrolledText by adding a vertical scrollbar to a Text widget. Getting ready for addtion of ttk scrollbars! 4.57.0.29 Backed out changes accidently checked in that will crash on Linux (DOH! SORRY!!!) + 4.57.0.30 + Withdraw window during creation in addition to setting alpha to 0 + 4.57.0.31 + Added tooltip_offset parameter to set_options as a way to hack around the 8.6.12 problem of missing events following a tooltip """ __version__ = version.split()[0] # For PEP 396 and PEP 345 @@ -16189,27 +16193,27 @@ def _convert_window_to_tk(window): :type window: (Window) """ - root = window.TKroot - root.title(window.Title) + master = window.TKroot + master.title(window.Title) InitializeResults(window) - PackFormIntoFrame(window, root, window) + PackFormIntoFrame(window, master, window) window.TKroot.configure(padx=window.Margins[0], pady=window.Margins[1]) # ....................................... DONE creating and laying out window ..........................# if window._Size != (None, None): - root.geometry("%sx%s" % (window._Size[0], window._Size[1])) - screen_width = root.winfo_screenwidth() # get window info to move to middle of screen - screen_height = root.winfo_screenheight() + master.geometry("%sx%s" % (window._Size[0], window._Size[1])) + screen_width = master.winfo_screenwidth() # get window info to move to middle of screen + screen_height = master.winfo_screenheight() if window.Location != (None, None): x, y = window.Location elif DEFAULT_WINDOW_LOCATION != (None, None): x, y = DEFAULT_WINDOW_LOCATION else: - root.update_idletasks() # don't forget to do updates or values are bad - win_width = root.winfo_width() - win_height = root.winfo_height() + master.update_idletasks() # don't forget to do updates or values are bad + win_width = master.winfo_width() + win_height = master.winfo_height() x = screen_width / 2 - win_width / 2 y = screen_height / 2 - win_height / 2 if y + win_height > screen_height: @@ -16222,14 +16226,15 @@ def _convert_window_to_tk(window): y += window.RelativeLoction[1] move_string = '+%i+%i' % (int(x), int(y)) - root.geometry(move_string) + master.geometry(move_string) window.config_last_location = (int(x), (int(y))) window.TKroot.x = int(x) window.TKroot.y = int(y) window.starting_window_position = (int(x), (int(y))) - root.update_idletasks() # don't forget - root.geometry(move_string) - root.update_idletasks() # don't forget + master.update_idletasks() # don't forget + master.geometry(move_string) + master.update_idletasks() # don't forget + _no_titlebar_setup(window) return @@ -17117,8 +17122,7 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ window_location=(None, None), error_button_color=(None, None), tooltip_time=None, tooltip_font=None, use_ttk_buttons=None, ttk_theme=None, suppress_error_popups=None, suppress_raise_key_errors=None, suppress_key_guessing=None,warn_button_key_duplicates=False, enable_treeview_869_patch=None, enable_mac_notitlebar_patch=None, use_custom_titlebar=None, titlebar_background_color=None, titlebar_text_color=None, titlebar_font=None, - titlebar_icon=None, user_settings_path=None, pysimplegui_settings_path=None, pysimplegui_settings_filename=None, keep_on_top=None, dpi_awareness=None, scaling=None, - disable_modal_windows=None): + titlebar_icon=None, user_settings_path=None, pysimplegui_settings_path=None, pysimplegui_settings_filename=None, keep_on_top=None, dpi_awareness=None, scaling=None, disable_modal_windows=None, tooltip_offset=(None, None)): """ :param icon: Can be either a filename or Base64 value. For Windows if filename, it MUST be ICO format. For Linux, must NOT be ICO. Most portable is to use a Base64 of a PNG file. This works universally across all OS's :type icon: bytes | str @@ -17228,6 +17232,8 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ :type scaling: (float) :param disable_modal_windows: If True then all windows, including popups, will not be modal windows :type disable_modal_windows: (bool) + :param tooltip_offset: Offset to use for tooltips as a tuple. These values will be added to the mouse location when the widget was entered. + :type tooltip_offset: ((None, None) | (int, int)) :return: None :rtype: None """ @@ -17284,6 +17290,7 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ global DEFAULT_KEEP_ON_TOP global DEFAULT_SCALING global DEFAULT_MODAL_WINDOWS_ENABLED + global DEFAULT_TOOLTIP_OFFSET global _pysimplegui_user_settings # global _my_windows @@ -17462,6 +17469,8 @@ def set_options(icon=None, button_color=None, element_size=(None, None), button_ if disable_modal_windows is not None: DEFAULT_MODAL_WINDOWS_ENABLED = not disable_modal_windows + if tooltip_offset != (None, None): + DEFAULT_TOOLTIP_OFFSET = tooltip_offset return True