Tkinter GUI:根据从另一个选项菜单中的选择更新选项菜单的选项

2024-03-28 14:56:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我构建了一个Tkinter GUI,它由几个下拉菜单组成,这些下拉菜单为一个可以通过点击GUI按钮运行的函数提供一些参数。 问题是这个函数只能用几个参数组合来执行(不是所有的组合都是可能的)。因此,我希望GUI根据第一个下拉菜单中的选项自动更新其下拉菜单中的选项列表。

我有一个函数,可以在选项a设置为某个值的情况下,为选项B、C、D、E导出可能的参数值,但我不知道如何更新GUI显示的选项。

有没有一个Tkinter函数可以用来实现对GUI选项菜单中的选项的自动更新?


编辑:

这是我试过的剧本。它似乎充满了错误,但我认为它可以说明我想做什么:

choices4option1 = [1,2,3]
choices4option2 = [4,5,6]
choices4option3 = [7,8,9]
def update_GUI_choices(option):
    if option == 'option1':
        if GUI_options.option1.get()==1:
           global choices4option2       
           choices4option2 = [4,5]
        else: pass
    elif option == 'option2':
        if GUI_options.option2.get()==4:
           global choices4option3       
           choices4option3 = [8,9]
        else: pass
    else: pass

# GUI
import Tkinter as tk
GUI = tk.Tk()

class GUI_options:
    option1 = tk.IntVar(GUI)
    option1.set('choose a value')
    option2 = tk.IntVar(GUI)
    option2.set('choose a value')
    option3 = tk.IntVar(GUI)
    option3.set('choose a value')

om_option1 = tk.OptionMenu(GUI, GUI_options.option1, *choices4option1)
om_option1.grid(column=0, row=0)
menu_option1 = om_option1.children["menu"]
menu_option1.delete(0,'end')
for values in (choices4option1):
    menu_option1.add_command(label=values, command=lambda: update_GUI_choices('option1'))

om_option2 = tk.OptionMenu(GUI, GUI_options.option2, *choices4option2)
om_option2.grid(column=0, row=1)
menu_option2 = om_option2.children["menu"]
menu_option2.delete(0,'end')
for values in (choices4option2):
    menu_option1.add_command(label=values, command=lambda: update_GUI_choices('option2'))

om_option3 = tk.OptionMenu(GUI, GUI_options.option3, *choices4option3)
om_option3.grid(column=0, row=2)
menu_option3 = om_option3.children["menu"]
menu_option3.delete(0,'end')
for values in (choices4option3):
    menu_option3.add_command(label=values, command=lambda: update_GUI_choices('option3'))

GUI.mainloop()

当菜单1中的选择完成时,如何提示选项菜单2获取新值?


Tags: 函数选项guicommandtkoptionsmenuvalues
1条回答
网友
1楼 · 发布于 2024-03-28 14:56:28

选项菜单由两部分组成:按钮和菜单。您可以从小部件的“children”属性获取这些部分。

om = tk.OptionMenu(...)
menu = om.children["menu"]

可以使用标准菜单功能删除菜单中的所有旧值:

menu.delete(0, "end")

可以使用标准菜单功能向菜单添加新项。您需要将一个命令与每个设置关联变量的命令相关联。因此,例如,如果知道与选项菜单关联的变量名为“self.choice”,则可以执行以下操作:

for value in ("value1", "value2", ...):
    menu.add_command(label=value, command=lambda v=value: self.choice.set(v))

相关问题 更多 >