【发布时间】: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