我在 Windows 7 上使用 Python 3.3。我有一个tkinter
应用程序可以Button
启动tkinter.simpledialog.Dialog
. 像这样(这是一个完整的、可运行的示例):
import tkinter
import tkinter.simpledialog
class Mainframe(tkinter.Frame):
def __init__(self, parent):
super(Mainframe, self).__init__(parent)
self.parent = parent
self.button = tkinter.Button(self, text="Open Dialog")
open_dialog_op = lambda ev: self.open_dialog(ev)
self.button.bind("<Button-1>", open_dialog_op)
self.button.bind("<Return>", open_dialog_op)
self.button.pack(side=tkinter.LEFT)
def open_dialog(self, event):
dialog = tkinter.simpledialog.Dialog(self.parent, "My Dialog")
self.button.config(relief=tkinter.RAISED) # does not help!
root = tkinter.Tk()
Mainframe(root).pack()
root.mainloop()
行为:
- 如果你关注“打开对话框”
Button
并输入RETURN,一切都很好 - 如果您用鼠标单击
Button
,对话框会显示得很好,但是 - 当对话框关闭时,“打开对话框”
Button
显示在其郁闷的(tkinter.SUNKEN
如果我没记错的话?)状态。 - (有趣的是,当对话框打开时,
Button
会正常显示。只有在对话框关闭时才会出现沮丧的外观。) - 我试图通过简单地调用来修复问题
button.config(relief=tkinter.RAISED)
,但在这种情况下似乎根本没有做任何事情。
(实际上,我的完整应用程序在单击按钮
后立即开始将按钮显示为按下状态,而不仅仅是在对话框再次关闭时。我发现这更合乎逻辑:simpledialog
本地事件循环捕获所有事件,因为它simpledialog
是模态的;这可能包括<ButtonRelease-1>
鼠标按钮上的事件?)
问题:
- 为什么会这样?
- 为什么我的完整应用程序中的行为会有所不同?
- 如何避免或修复两者?