我正在从这里使用名为Combobox_Autocomplete的此类:http://code.activestate.com/recipes/580770-combobox-autocomplete/
它实际上是基于实例化类时为其提供的列表来创建具有自动完成功能的Entry。
为简单起见,假设我必须在表中的列如下所示:
Car_model | Color
1 | Red
1 | Blue
1 | Green
2 | Red
2 | Blue
3 | Red
3 | Yellow
我本质上想要的是其中两个“自动完成”框,第一个是汽车模型,第二个是颜色,颜色会根据选择的汽车进行调整。
在更新第二个自动完成功能块中的第二个列表时,我遇到了一个障碍。这是我的代码:
class maconomy:
def __init__(self,master):
# Assuming df2 is my table
# Create unique lists of both columns for the autofill features
self.mylist = list(set(self.df2['Car_model'].tolist()))
self.myList2 = list(set(self.df2['Color'].tolist()))
self.combobox_autocomplete1 = Combobox_Autocomplete(master,
self.mylist, highlightthickness=1)
self.combobox_autocomplete1.grid(row = 1, column = 1,padx=10, pady=10)
self.combobox_autocomplete1.bind('<Double-Return>', lambda event,
arg=1: self.update(event, arg))
self.combobox_autocomplete2 = Combobox_Autocomplete(master,
self.myList2, highlightthickness=1)
self.combobox_autocomplete2.grid(row = 2, column = 1,padx=10, pady=10)
self.combobox_autocomplete2.bind('<Double-Return>', lambda event,
arg=2: self.update(event, arg))
# Update method just switches to next combobox
def update(self,event,arg):
if arg == 5:
self.commitButton.focus_set()
else:
eval('self.combobox_autocomplete'+str(arg+1)+'.focus_set()')
我的主要想法是使mylist2成为属性。更新它,取决于car_model是什么。这就是我所拥有的:
@property
def mylist2(self):
if self.combobox_autocomplete1.get_value() != "":
self.myList2 = df2[df2['Car_model'] ==self.combobox_autocomplete1.get_value()]['Color']
return myList2
else:
return myList2
但是,这不会更新与组合框关联的列表,因为它不会重新初始化组合框。有谁知道我如何实现这一目标?