我一直在搜索有关以下 Tkinter 窗口功能的信息,但没有成功。平台是 Windows,Python 2.7。这篇文章的末尾是可用于探索 Tkinter 窗口事件的代码。
如何检测窗口最小化/最大化事件?通过绑定(bind)到窗口的
<Configure>
返回的事件对象event 确实包含有关这些事件的任何信息。我搜索了可能会公开这些事件但未成功的协议(protocol)(如WM_DELETE_WINDOW
)。如何确定窗口框架边框大小(不是 Tkinter 框架,操作系统在 Tkinter 放置其小部件的容器周围放置的框架)?是否有非平台特定的方法来发现这些窗口属性,或者我是否需要使用平台特定的解决方案,如 Windows 下的 win32 api?
如何确定窗口的可见性,例如。
.withdraw()
设置的窗口是否不可见?是否可以取消窗口事件,例如。如果想将窗口限制在用户桌面上的某个位置?返回
'break'
从窗口的<Configure>
事件不会取消窗口移动或调整大小事件。
这里是试验 Tkinter 窗口事件的示例代码。
from __future__ import print_function
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
def onFormEvent(event):
for key in dir(event):
if not key.startswith('_'):
print('%s=%s' % (key, getattr(event, key)))
print()
root = tk.Tk()
root.geometry('150x50')
lblText = tk.Label(root, text='Form event tester')
lblText.pack()
root.bind('<Configure>', onFormEvent)
root.mainloop()
更新:e 以下是我从以下事件中了解到的信息:
-
event.type == 22
(以下一项或多项已更改:宽度、高度、x、y) -
event.type == 18
(最小化)event.widget.winfo_viewable() = 0
(隐形) -
event.type == 19
(最小化后恢复) -
event.type == 2
(最大化) -
event.type == 22
(因宽高变化最大化后恢复)
最佳答案
确定窗口可见性是通过 .winfo_viewable()
调用完成的。如果可见,则返回 1
,如果不可见,则返回 0
。
如果你想阻止窗口调整大小,按照你想要的方式设置你的窗口,然后使用
self.root.minsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())
self.root.maxsize(self.root.winfo_reqwidth(), self.root.winfo_reqheight())
在您的 __init__
调用结束时。
要完全禁止窗口移动,您可能只想使用 self.root.overrideredirect(True)
删除标题栏和框架。
关于python - Tkinter 窗口事件和属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4038070/