Tkinter命令在第二个OptionMenu中没有反应



我有两个选项菜单。第一种是在第二个选项菜单中选择制造商和方法分配以命令清除选项,并添加分配给选定制造商的选项。问题是第二个OptionMenu没有触发分配给它的命令参数的方法。当我删除/评论第一个选项菜单,然后第二个工作正常。为什么
这是一段代码:

self.cells_menu = tk.OptionMenu(self.local_master,
self.selected_cell,
*[c.full_name() 
for c in available_cells.values()
if len(c.performed_tests)>0],
command=lambda x: self.on_cell_select(x))
self.cells_menu.config(width=40, anchor="w")
self.cells_menu.grid(row=1, column=0, sticky="W", columnspan=2)
# (...)
self.selected_test = tk.StringVar(self.local_master)
self.test_menu = tk.OptionMenu(self.local_master,
self.selected_test,
*(None, None),
command=lambda x: print(self.selected_test, x))
self.test_menu.config(width=40, anchor="w")
self.test_menu.grid(row=3, column=0, sticky="W", columnspan=2)
# (...)
def on_cell_select(self, cell_name: str):
self.selected_cell.set(cell_name)
new_cell = self.available_cells[cell_name]
self.update_test_list(new_cell,
self.test_menu,
self.selected_test)

def on_test_select(self, cell_name: str):
print(cell_name)
curr_cell = self.available_cells[cell_name]
print(curr_cell)

def update_test_list(self,
new_cell: Cell,
menu_to_update: tk.OptionMenu,
assign_varstring: tk.StringVar):
self.selected_test.set('')
menu_to_update["menu"].delete(0, "end")

for test in new_cell.performed_tests:
menu_to_update["menu"].add_command(label=test,
command=tk._setit(assign_varstring,
test))```
我找到了答案
我只需要向add_command方法添加第三个参数。就像这个
def on_cell_select(self, cell_name: str):
self.selected_cell.set(cell_name)
new_cell = self.available_cells[cell_name]
self.update_test_list(new_cell,
self.test_menu,
self.selected_test,
(...))
# (...)
def update_test_list(self,
new_cell: Cell,
menu_to_update: tk.OptionMenu,
assign_varstring: tk.StringVar,
command: Callable):
self.selected_test.set('')
menu_to_update["menu"].delete(0, "end")
menu_to_update.config()
for test in new_cell.performed_tests:
menu_to_update["menu"].add_command(label=test,
command=tk._setit(assign_varstring,
test,
command))

最新更新