更改 StringVar 时,OptionMenu 小部件不会更新,直到悬停

我需要一个菜单,它可以响应通过运行代码单击的项目,然后将文本切换回默认文本。


目前,我的实现有效,但默认文本仅在单击后光标悬停在菜单上时显示。


我已经搜索过,但找不到与此问题相关的任何内容,尽管这可能是因为我不确定究竟是什么原因造成的。


这是重现此行为的代码:


from tkinter import *


root = Tk()


default_text = 'select an item'


def thing_selected(self, *args):

    #other stuff happens here

    var.set(default_text)


var = StringVar(root)

var.set(default_text)

var.trace('w', thing_selected)


menu = OptionMenu(root, var, *['Pizza','Lasagne','Fries','Fish'])

menu.pack()


root.mainloop()

这是一个代表结果的gif:

http://img2.mukewang.com/62289ff70001ff1a01540075.jpg

我希望顶部的文本会立即更新,但只有当光标悬停在小部件上时才会更新

我正在寻找某种方法来触发小部件上的悬停事件,或者我愿意接受任何其他方法的建议来实现这一点。


慕妹3146593
浏览 126回答 1
1回答

慕斯王

您可以采取不同的路线并使用以下command属性OptionMenu:import tkinter as tkroot = tk.Tk()default_text = 'select an item'def thing_selected(selected):    #other stuff happens here    print(var.get())    var.set(default_text)    print(var.get())var = tk.StringVar()var.set(default_text)options = ['Pizza','Lasagne','Fries','Fish']menu = tk.OptionMenu(root, var, *options, command = thing_selected)menu.pack()root.mainloop()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python