fix:select or text change
This commit is contained in:
parent
852b9737d2
commit
bd51efeb43
tkinter_ui
@ -80,11 +80,11 @@ class HotelUI:
|
||||
values=regions,
|
||||
selected_values=region_selected_values,
|
||||
height=10,
|
||||
command=self.update_region_list,
|
||||
)
|
||||
self.region_list_combo.pack(
|
||||
side=tk.LEFT, padx=4, pady=8, expand=True, fill=tk.BOTH
|
||||
)
|
||||
self.region_list_combo.bind("<KeyRelease>", self.update_region_list)
|
||||
|
||||
frame_hotel_page_num = tk.Frame(root)
|
||||
frame_hotel_page_num.pack(fill=tk.X)
|
||||
|
@ -52,11 +52,11 @@ class MulticastUI:
|
||||
values=regions,
|
||||
selected_values=region_selected_values,
|
||||
height=10,
|
||||
command=self.update_region_list,
|
||||
)
|
||||
self.region_list_combo.pack(
|
||||
side=tk.LEFT, padx=4, pady=8, expand=True, fill=tk.BOTH
|
||||
)
|
||||
self.region_list_combo.bind("<KeyRelease>", self.update_region_list)
|
||||
|
||||
frame_multicast_page_num = tk.Frame(root)
|
||||
frame_multicast_page_num.pack(fill=tk.X)
|
||||
|
@ -5,20 +5,41 @@ class SelectCombobox(ttk.Combobox):
|
||||
def __init__(self, master=None, **kwargs):
|
||||
selected_values = kwargs.pop("selected_values", [])
|
||||
values = kwargs.pop("values", [])
|
||||
command = kwargs.pop("command", None)
|
||||
super().__init__(master, **kwargs)
|
||||
self.selected_values = selected_values
|
||||
self.values = values
|
||||
self.command = command
|
||||
self["values"] = self.values
|
||||
self.bind("<<ComboboxSelected>>", self.on_select)
|
||||
self.bind("<FocusOut>", self.on_text_change)
|
||||
self.update_values()
|
||||
|
||||
def on_select(self, event):
|
||||
selected_value = self.get().strip()
|
||||
if selected_value in self.selected_values:
|
||||
self.selected_values.remove(selected_value)
|
||||
else:
|
||||
self.selected_values.append(selected_value)
|
||||
self.update_selected_values(selected_value)
|
||||
self.update_values()
|
||||
if self.command:
|
||||
self.command(event)
|
||||
|
||||
def on_text_change(self, event):
|
||||
text_value = self.get().strip()
|
||||
value_list = [value.strip() for value in text_value.split(",")]
|
||||
self.selected_values = [
|
||||
value for value in self.selected_values if value in value_list
|
||||
]
|
||||
for value in value_list:
|
||||
if value in self.values and value not in self.selected_values:
|
||||
self.selected_values.append(value)
|
||||
self.update_values()
|
||||
if self.command:
|
||||
self.command(event)
|
||||
|
||||
def update_selected_values(self, value):
|
||||
if value in self.selected_values:
|
||||
self.selected_values.remove(value)
|
||||
else:
|
||||
self.selected_values.append(value)
|
||||
|
||||
def update_values(self):
|
||||
display_text = ",".join(self.selected_values)
|
||||
|
Loading…
x
Reference in New Issue
Block a user