繁体   English   中英

Python 3 Tkinter Menu小部件的回调似乎不正确

[英]Python 3 Tkinter Menu widget's callback seems out of sequence

我在Tkinter 菜单小部件(无菜单按钮)上遇到了麻烦,因此回调似乎没有顺序。 这是一个非常小的示例:

# Python 3.6.5.  Windows 7 x64.
from tkinter import *
root = Tk()

popup = Menu(root, tearoff=0)
popup.add_command(label="test", command=lambda: print("clicked 'test'"))

print("Before post")
popup.post(200,200)  # Expecting print output from this (when clicked)
print("After post")

root.mainloop()
print("end of program")

预期产量:

Before post
clicked 'test'
After post
end of program

实际输出:

Before post
After post 
clicked 'test'   <--- Shouldn't this appear BEFORE previous line?
end of program

我尝试了很多事情,但都没有成功,例如:popup.wait_window(),popup.update_idletasks(),popup.grab_release(),popup.unpost(),popup.destroy(),tk_popup(而不是Menu),等等

任何意见,将不胜感激。

单击“测试” <---难道不是在上一行之前出现?

不,不应该。 该帖子只会使菜单显示,而不会等待用户从菜单中选择内容。 这不是tkinter菜单设计的工作方式。

如果您需要暂停代码直到用户做出选择,您可能需要等待一个变量,然后确保所有菜单项都设置了该变量。

尽管显然该命令应该执行,但我在Linux上没有得到该结果。 从文档:

如果为级联条目指定了-command选项,则每当调用该条目时,它将被视为Tcl命令。

我的建议是不要尝试使用其他触发器来触发事件。 而是将菜单命令和您要通过编程方式尝试执行的所有操作都指向同一目标。

from tkinter import *

def func():
    print("clicked 'test'")

root = Tk()

popup = Menu(root, tearoff=0)
popup.add_command(label="test", command=func)
root['menu'] = popup
print("Before post")
func()
print("After post")

root.mainloop()
print("end of program")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM