1
0

fix:select or text change

This commit is contained in:
guorong.zheng 2024-09-05 14:45:19 +08:00
parent 852b9737d2
commit bd51efeb43
3 changed files with 27 additions and 6 deletions

@ -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)