MoT*_*GGE 2 python tkinter drop-down-menu
我构建了一个由多个下拉菜单组成的Tkinter-GUI,它为一个可以通过点击GUI按钮运行的函数提供一些参数.问题是这个功能只能用几个参数组合来执行(不是每种组合都可以).因此,我希望GUI根据第一个下拉菜单中的选项自动更新其下拉菜单中的选项列表.
我有一个函数,可以在选项A设置为某个值的条件下导出选项B,C,D,E的可能参数值,但我不知道如何更新由选项A显示的选项GUI.
是否有Tkinter功能可用于实现GUI选项菜单中选项的自动更新?
编辑:
这是我试过的脚本.它似乎充满了bug但我认为它可以说明我想要做的事情:
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()
Run Code Online (Sandbox Code Playgroud)
当菜单1中的选项完成时,如何提示选项菜单2获取新值?
选项菜单由两部分组成:按钮和菜单.您可以从小部件的"children"属性中获取这些部分.
om = tk.OptionMenu(...)
menu = om.children["menu"]
Run Code Online (Sandbox Code Playgroud)
您可以使用标准菜单功能删除菜单中的所有旧值:
menu.delete(0, "end")
Run Code Online (Sandbox Code Playgroud)
您可以使用标准菜单功能将新项目添加到菜单中.您需要将命令与设置关联变量的命令相关联.因此,例如,如果您知道与选项菜单关联的变量名为"self.choice",则可以执行以下操作:
for value in ("value1", "value2", ...):
menu.add_command(label=value, command=lambda v=value: self.choice.set(v))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8806 次 |
最近记录: |