python - Tkinter 窗口事件和属性

标签 python windows user-interface tkinter

我一直在搜索有关以下 Tkinter 窗口功能的信息,但没有成功。平台是 Windows,Python 2.7。这篇文章的末尾是可用于探索 Tkinter 窗口事件的代码。

  1. 如何检测窗口最小化/最大化事件?通过绑定(bind)到窗口的 <Configure> 返回的事件对象event 确实包含有关这些事件的任何信息。我搜索了可能会公开这些事件但未成功的协议(protocol)(如 WM_DELETE_WINDOW)。

  2. 如何确定窗口框架边框大小(不是 Tkinter 框架,操作系统在 Tkinter 放置其小部件的容器周围放置的框架)?是否有非平台特定的方法来发现这些窗口属性,或者我是否需要使用平台特定的解决方案,如 Windows 下的 win32 api?

  3. 如何确定窗口的可见性,例如。 .withdraw() 设置的窗口是否不可见?

  4. 是否可以取消窗口事件,例如。如果想将窗口限制在用户桌面上的某个位置?返回'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 以下是我从以下事件中了解到的信息:

  1. event.type == 22 (以下一项或多项已更改:宽度、高度、x、y)
  2. event.type == 18 (最小化)event.widget.winfo_viewable() = 0 (隐形)
  3. event.type == 19 (最小化后恢复)
  4. event.type == 2 (最大化)
  5. 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/

相关文章:

Windows 中的 Python 配置 - 模块位置 - pip 与 Eclipse/Liclipse

user-interface - Java Swing - 半透明组件

python - 有没有办法删除一列来执行 TSNE?

python - Pandas - 为分组数据中的每个组分配唯一 ID

windows - 仅对一个应用程序启用带有 Schannel/WinSSL 的 FIPS 140-2

windows - 对于使用 2 台独立计算机的 1 个程序员来说,好的 VCS 是什么?

python - 使用 BeautifulSoup 查找特定字符串之后的第一个字符串

python - python中的多维卷积

php - 检查用户是否在线。ajax 请求太多

java - JDialog 因失去焦点而卡住?