Создание уникальных comboboxes в вкладках ноутбука с использованием tkinter и python 3

Я пытаюсь создать программу, которая будет удерживать значения развертки ВЧ-направленного ответвителя.

У меня есть 5 ответвителей, и у каждого ответвителя есть 4 прямой def __init__ ( self , parent , controller ): tk . Рамка . __init__ ( self , parent ) Notebook_Tabbed = ttk . Блокнот ( сам ) VHF_1 , VHF_2 = ttk . Frame ( Notebook_Tabbed ), ttk . Рамка ( Notebook_Tabbed ) Notebook_Tabbed . сетка ( столбец = 2 , строка = 2 , столбцы = 5 , липкий = "nwes" ) Notebook_Tabbed . add ( VHF_1 , text = 'VHF 1' ), Notebook_Tabbed . add ( VHF_2 , text = 'VHF 2' ) # Словари для хранения переменных каждого соединителя vhf_1_dict = { 1 : [ 2 , 7 , 4 , 5 ], 3 : [ 2 , 7 , 9 , 10 ]} vhf_2_dict = { 1 : [ 9 , 14 , 4 , 5 ], 3 : [ 9 , 14 , 9 , 10 ]} # словаря для хранения выше словарей var_dict = { VHF_1 : vhf_1_dict , VHF_2 : vhf_2_dict } Защиты populate_table_tab ( самостоятельный , вкладка , Row_Start , Row_End , Column_Start , Column_End , Coupler_Type , порт ): печать ( закладка , Row_Start , Row_End , Column_Start , Column_End , Coupler_Type , порт ) # Загрузить данные для выбранного порта четкости change_port ( самостоятельно , закладка , порт ): populate_table_tab ( я , вкладки , var_dict [ вкладка ] [ port ] [ 0 ], var_dict [ tab ] [ port ] [ 1 ], var_dict [ tab ] [ port ] [ 2 ], var_dict [ tab ] [ port ] [ 3 ], 'VHF' , порт ) # Создать комбобокс для каждой вкладки из ноутбуков портов = STRINGVAR () порты . set ( 1 ) def generate_port_selections ( self , tab , row_num ): port_selection = ttk . Combobox ( tab , textvariable = ports , state = 'readonly' , justify = "center" ) port_selection [ 'values' ] = ( 1 , 3 ) port_selection . grid ( column = 2 , row = row_num , sticky = "nwes" ) port_selection . bind ( '<< ComboboxSelected >>' , lambda _ : change_port ( self , tab , int ( ports . get ()))) # _ обозначает аргумент throwaway, необходимый для работы лямбда с событием combobox. # Сочетание выбора портов каждая вкладка для tab , row_num в { VHF_1 : 4 , VHF_2 : 11 }. items (): generate_port_selections ( self , tab , row_num ) .

Мне удалось получить 5 ответвителей на отдельных вкладках ноутбука tk и загрузить сохраненные данные из excel для одного порта. проблема возникает, когда я хочу сделать перезагрузку данных UI для другого порта, используя («<< ComboboxSelected >>», lambda i = i: change_port (self, tab, port_selection_list [i] .get ())).

Код, который у меня есть на данный момент:

TypeError: list indices must be integers or slices, not Event

Этот код действительно работает, но он одновременно меняет значение со списком на всех других вкладках, не изменяя данные, загруженные из excel.

Я пробовал: StringVar но ports = StringVar()происходит.

Любая помощь будет принята с благодарностью, также я отправил ее в спешке, поскольку я работаю и занят, поэтому, если я пропустил какой-либо необходимый код / ??информацию, пожалуйста, спросите.

Изменить: форматированный код для чтения, делая одиночные строки в несколько.

Изменить 2: Упрощенный код.

Изменить 3: теперь вы можете запустить код в пустом контейнере и кадре из этого кода.

python-3.x,for-loop,tkinter,combobox,

0

Ответов: 1


0 принят

У вас проблемы, потому что вы создаете только одно Combobox( textvariable=ports )( ports = StringVar()), и вы используете его со всеми, generate_port_selections()чтобы они делились той же информацией.

Вы должны использовать portsвнутри, Comboboxчтобы создать новый уникальный portsдля нового Combobox.

Python-3.х, для цикла, Tkinter, выпадающий,
Похожие вопросы