【发布时间】:2014-08-25 02:01:14
【问题描述】:
短版:有没有办法控制在 Tkinter 中处理与不同小部件关联的回调的顺序?
加长版:在测试和学习 Tkinter 时,我一直在 IDLE 中使用以下程序:
import Tkinter
guiRoot = Tkinter.Tk()
hWindow = Tkinter.Frame(guiRoot)
hWindow.grid(); x = 0; y = 0
et1 = Tkinter.Entry(hWindow)
et2 = Tkinter.Entry(hWindow)
def ut(x, y, event):
print "X",x,", Y:",y
print "Args:",
print "Widget:",event.widget.get()
print
def Tkquit():
print "Leaving program..."
et1 = Tkinter.Entry(hWindow)
et2 = Tkinter.Entry(hWindow)
eb = Tkinter.Button(hWindow, command=Tkquit, text="Send")
et1.grid(column=x, row=y)
et1.bind("<FocusOut>", lambda event, x1=x, y1=y:ut(x1, y1, event))
y = y + 1; et2.grid(column=x, row=y)
et2.bind("<FocusOut>", lambda event, x1=x, y1=y:ut(x1, y1, event))
y = y + 1
eb.grid(column=x, row=y)
guiRoot.mainloop()
当我从一个 Entry 字段移动到另一个时,会调用 ut()。当我点击按钮时,我收到消息“Leaving program...”(稍后将在例程中退出代码),但没有来自刚刚失去焦点的文本小部件的消息。
这引出了两个问题:
1) 为什么没有调用 Entry 字段的回调?
此外,如果我希望该按钮退出应用程序,我还暗示我希望其他回调在来自该按钮的回调之前完成。所以:
2) 如何控制 Tkinter 调用回调的顺序?
【问题讨论】: