【问题标题】:How to add options in OptionMenu without using the add_command function in Tkinter?如何在不使用 Tkinter 中的 add_command 函数的情况下在 OptionMenu 中添加选项?
【发布时间】:2017-03-05 02:34:06
【问题描述】:

有什么方法可以在不使用命令标志的情况下在 OptionMenu 对象中添加选项?

我看过很多帖子,例如this one,展示了 add_command 如何更新/删除/添加选项到已经存在的 OptionMenu 对象。例如,这段代码的 sn-p 删除了 serialPortOptionMenu 中的所有选项,并使用不同的选项重新填充选项菜单:

serialPortOptionMenu["menu"].delete(0, "end")
for serialPort in serialPortsArray:
    serialPortOptionMenu["menu"].add_command(label=serialPort[1], command=lambda v=serialPort: serialPortFunc(v))

但是,这样的事情似乎覆盖了我在创建 OptionMenu 对象时编写的原始命令标志:

serialPortOptionMenuValue = Tkinter.StringVar(optionMenuFrame)
serialPortOptionMenuValue.set(serialPorts[0])
serialPortOptionMenu = Tkinter.OptionMenu(optionMenuFrame, serialPortOptionMenuValue, *serialPorts, command=lambda *args: callbackFuncWhenOptionMenuSelectsAnotherOption(*args))
serialPortOptionMenu.grid(row=3, column=0, columnspan=2, sticky="we")

我相信很多人都想知道为什么我要在 OptionMenu 中设置命令(我知道很奇怪),这是因为我希望在用户选择新选项时调用回调函数。

“跟踪选项怎么样”-每个人......是的,我也知道这一点,但是因为我正在代码中读取/写入 Tkinter 变量的新值,而没有 OptionMenu 单独更改它,使用跟踪当用户在 OptionMenu 中选择一个新选项时,Tkinter 内不能有效替代仅跟踪。

为什么我要更改代码中的 Tkinter 值而不让 OptionMenu 执行此操作?因为我认为在字符串末尾用 ~ 之类的东西修改 Tkinter 值字符串会很好,以表示幕后正在发生的事情尚未完成,只有当它完成时 ~ 才会消失,因此在没有 OptionMenu 单独更改值的情况下读取和写入值。

我主要感兴趣的是是否有人知道在不使用的情况下向 OptionMenu 对象添加选项的其他方法

myMenu["menu"].add_command(..., command=...)

因为它似乎正在删除我原来的回调函数。

注意:有两个 OptionMenus 并在它们上执行 grid_remove/grid 以隐藏/显示它们也出现在我的脑海中,但似乎很混乱。

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    没有其他办法。选项菜单只不过是一个菜单按钮和一个带有自定义绑定的菜单。您可以创建自己的OptionMenu 并添加您想要的任何方法。

    【讨论】:

    • 我很少直接使用 ttk,除了使用 ttk.Notebook 制作标签。从here 简要查找了一个菜单按钮。似乎与 Tkinter.OptionMenu 的实例化方式(父级、选项等)相似。认为您可以举一个简短的例子或为我指出一个很好的资源来完成我正在尝试做的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2016-05-10
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多