スクロールバーの消えるタイミングを修正

This commit is contained in:
misygauziya
2023-07-15 09:42:06 +09:00
parent 931fe674a6
commit 631fb1e6fb
2 changed files with 72 additions and 74 deletions

View File

@@ -8,7 +8,6 @@ Homepage: https://github.com/Akascape/CTkScrollableDropdown
Advanced Scrollable Dropdown class for customtkinter widgets Advanced Scrollable Dropdown class for customtkinter widgets
Author: Akash Bora Author: Akash Bora
""" """
import customtkinter import customtkinter
import sys import sys
import time import time
@@ -23,7 +22,6 @@ class CTkScrollableDropdown(customtkinter.CTkToplevel):
super().__init__(takefocus=1) super().__init__(takefocus=1)
self.transient(self.master) self.transient(self.master)
self.focus()
self.alpha = alpha self.alpha = alpha
self.attach = attach self.attach = attach
self.corner = frame_corner_radius self.corner = frame_corner_radius
@@ -74,6 +72,7 @@ class CTkScrollableDropdown(customtkinter.CTkToplevel):
border_color=self.frame_border_color) border_color=self.frame_border_color)
self.frame._scrollbar.grid_configure(padx=3) self.frame._scrollbar.grid_configure(padx=3)
self.frame.pack(expand=True, fill="both") self.frame.pack(expand=True, fill="both")
self.dummy_entry = customtkinter.CTkEntry(self.frame, fg_color="transparent", border_width=0, height=1, width=1) self.dummy_entry = customtkinter.CTkEntry(self.frame, fg_color="transparent", border_width=0, height=1, width=1)
self.no_match = customtkinter.CTkLabel(self.frame, text="No Match") self.no_match = customtkinter.CTkLabel(self.frame, text="No Match")
self.height = height self.height = height
@@ -99,7 +98,6 @@ class CTkScrollableDropdown(customtkinter.CTkToplevel):
self.image_values = None if len(image_values)!=len(self.values) else image_values self.image_values = None if len(image_values)!=len(self.values) else image_values
self.resizable(width=False, height=False) self.resizable(width=False, height=False)
# self.transient(self.master)
self._init_buttons(**button_kwargs) self._init_buttons(**button_kwargs)
# Add binding for different ctk widgets # Add binding for different ctk widgets
@@ -208,19 +206,19 @@ class CTkScrollableDropdown(customtkinter.CTkToplevel):
self.x_pos, self.y_pos)) self.x_pos, self.y_pos))
self.fade_in() self.fade_in()
self.attributes('-alpha', self.alpha) self.attributes('-alpha', self.alpha)
self.attach.focus()
def _iconify(self): def _iconify(self):
if self.disable: return if self.disable: return
if self.hide: if self.hide:
self._deiconify() self._deiconify()
self.focus()
self.hide = False
self.place_dropdown() self.place_dropdown()
if self.focus_something: if self.focus_something:
self.dummy_entry.pack() self.dummy_entry.pack()
self.dummy_entry.focus_set() self.dummy_entry.focus_set()
self.after(100, self.dummy_entry.pack_forget) self.after(100, self.dummy_entry.pack_forget)
self.hide = False
self.focus_set()
self.focus()
else: else:
self.withdraw() self.withdraw()
self.hide = True self.hide = True

View File

@@ -533,9 +533,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_appearance_theme_callback, command=self.optionmenu_appearance_theme_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_appearance_theme.frame.bind( self.scrollableDropdown_appearance_theme.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_appearance_theme._iconify(), lambda e: self.scrollableDropdown_appearance_theme._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_appearance_theme.frame._parent_frame)) else None,
) )
## optionmenu UI scaling ## optionmenu UI scaling
@@ -567,9 +567,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_ui_scaling_callback, command=self.optionmenu_ui_scaling_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_ui_scaling.frame.bind( self.scrollableDropdown_ui_scaling.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_ui_scaling._iconify(), lambda e: self.scrollableDropdown_ui_scaling._iconify() if not str(e.widget).startswith(str(self.scrollableDropdown_ui_scaling.frame._parent_frame)) else None,
) )
## optionmenu font family ## optionmenu font family
@@ -599,9 +599,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_font_family_callback, command=self.optionmenu_font_family_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_font_family.frame.bind( self.scrollableDropdown_font_family.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_font_family._iconify(), lambda e: self.scrollableDropdown_font_family._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_font_family.frame._parent_frame)) else None,
) )
## optionmenu ui language ## optionmenu ui language
@@ -634,9 +634,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_ui_language_callback, command=self.optionmenu_ui_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_ui_language.frame.bind( self.scrollableDropdown_ui_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_ui_language._iconify(), lambda e: self.scrollableDropdown_ui_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_ui_language.frame._parent_frame)) else None,
) )
# tab Translation # tab Translation
@@ -671,9 +671,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_translator_callback, command=self.optionmenu_translation_translator_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_translation_translator.frame.bind( self.scrollableDropdown_translation_translator.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_translation_translator._iconify(), lambda e: self.scrollableDropdown_translation_translator._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_translation_translator.frame._parent_frame)) else None,
) )
## optionmenu translation input language ## optionmenu translation input language
@@ -707,9 +707,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_input_source_language_callback, command=self.optionmenu_translation_input_source_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_translation_input_source_language.frame.bind( self.scrollableDropdown_translation_input_source_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_translation_input_source_language._iconify(), lambda e: self.scrollableDropdown_translation_input_source_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_translation_input_source_language.frame._parent_frame)) else None,
) )
## label translation input arrow ## label translation input arrow
@@ -742,9 +742,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_input_target_language_callback, command=self.optionmenu_translation_input_target_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_translation_input_target_language.frame.bind( self.scrollableDropdown_translation_input_target_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_translation_input_target_language._iconify(), lambda e: self.scrollableDropdown_translation_input_target_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_translation_input_target_language.frame._parent_frame)) else None,
) )
## optionmenu translation output language ## optionmenu translation output language
@@ -778,9 +778,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_output_source_language_callback, command=self.optionmenu_translation_output_source_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_translation_output_source_language.frame.bind( self.scrollableDropdown_translation_output_source_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_translation_output_source_language._iconify(), lambda e: self.scrollableDropdown_translation_output_source_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_translation_output_source_language.frame._parent_frame)) else None,
) )
## label translation output arrow ## label translation output arrow
@@ -813,9 +813,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_output_target_language_callback, command=self.optionmenu_translation_output_target_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_translation_output_target_language.frame.bind( self.scrollableDropdown_translation_output_target_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_translation_output_target_language._iconify(), lambda e: self.scrollableDropdown_translation_output_target_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_translation_output_target_language.frame._parent_frame)) else None,
) )
# tab Transcription # tab Transcription
@@ -850,9 +850,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_host_callback, command=self.optionmenu_input_mic_host_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_input_mic_host.frame.bind( self.scrollableDropdown_input_mic_host.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_input_mic_host._iconify(), lambda e: self.scrollableDropdown_input_mic_host._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_input_mic_host.frame._parent_frame)) else None,
) )
## optionmenu input mic device ## optionmenu input mic device
@@ -884,9 +884,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_device_callback, command=self.optionmenu_input_mic_device_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_input_mic_device.frame.bind( self.scrollableDropdown_input_mic_device.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_input_mic_device._iconify(), lambda e: self.scrollableDropdown_input_mic_device._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_input_mic_device.frame._parent_frame)) else None,
) )
## optionmenu input mic voice language ## optionmenu input mic voice language
@@ -918,9 +918,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_voice_language_callback, command=self.optionmenu_input_mic_voice_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_input_voice_language.frame.bind( self.scrollableDropdown_input_voice_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_input_voice_language._iconify(), lambda e: self.scrollableDropdown_input_voice_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_input_voice_language.frame._parent_frame)) else None,
) )
## slider input mic energy threshold ## slider input mic energy threshold
@@ -1085,9 +1085,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_speaker_device_callback, command=self.optionmenu_input_speaker_device_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_input_speaker_device.frame.bind( self.scrollableDropdown_input_speaker_device.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_input_speaker_device._iconify(), lambda e: self.scrollableDropdown_input_speaker_device._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_input_speaker_device.frame._parent_frame)) else None,
) )
## optionmenu input speaker voice language ## optionmenu input speaker voice language
@@ -1119,9 +1119,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_speaker_voice_language_callback, command=self.optionmenu_input_speaker_voice_language_callback,
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.scrollableDropdown_input_speaker_voice_language.frame.bind( self.scrollableDropdown_input_speaker_voice_language.bind(
"<Leave>", "<Leave>",
lambda e: self.scrollableDropdown_input_speaker_voice_language._iconify(), lambda e: self.scrollableDropdown_input_speaker_voice_language._withdraw() if not str(e.widget).startswith(str(self.scrollableDropdown_input_speaker_voice_language.frame._parent_frame)) else None,
) )
## entry input speaker energy threshold ## entry input speaker energy threshold