Я использую этот класс Combobox_Autocomplete отсюда: http://code.activestate.com/recipes/580770-combobox-autocomplete/
По сути, он создает запись с функцией автозаполнения, основанную на списке, который предоставляется ей при создании экземпляра класса.
В моем случае, чтобы упростить, скажем, мне нужно столбцов в моей таблице, которая выглядит следующим образом:
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
Это, однако, не обновляет список, связанный с комбинированным списком, поскольку он не инициализирует этот комбинированный список.У кого-нибудь есть идеи, как мне этого добиться?