单击按钮时更改 OptionMenu 的选项

新手上路,请多包涵

假设我有一个选项菜单 network_select 有一个要连接的网络列表。

 import Tkinter as tk

choices = ('network one', 'network two', 'network three')
var = tk.StringVar(root)
network_select = tk.OptionMenu(root, var, *choices)

现在,当用户按下刷新按钮时,我想更新用户可以连接的网络列表。

  • 我不可以使用 .config 因为我查看了 network_select.config() 并且没有看到看起来像我给它的选择的条目。
  • 我不认为这是可以使用 tk 变量更改的东西,因为没有 ListVar 这样的东西。

原文由 charmoniumQ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 649
2 个回答

我修改了您的脚本以演示如何执行此操作:

 import Tkinter as tk

root = tk.Tk()
choices = ('network one', 'network two', 'network three')
var = tk.StringVar(root)

def refresh():
    # Reset var and delete all old options
    var.set('')
    network_select['menu'].delete(0, 'end')

    # Insert list of new options (tk._setit hooks them up to var)
    new_choices = ('one', 'two', 'three')
    for choice in new_choices:
        network_select['menu'].add_command(label=choice, command=tk._setit(var, choice))

network_select = tk.OptionMenu(root, var, *choices)
network_select.grid()

# I made this quick refresh button to demonstrate
tk.Button(root, text='Refresh', command=refresh).grid()

root.mainloop()

单击“刷新”按钮后,network_select 中的选项将被清除,而 new_choices 中的选项将被插入。

原文由 user2555451 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果使用 ttk,OptionMenu 对象上有一个方便的 set_menu(default=None, values) 方法。

原文由 Eva Lond 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题