簡體   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