检测窗口何时打开

时间:2017-08-06 22:06:39

标签: python-3.x tkinter

是否有事件或方法来检测窗口何时打开/重新打开?

我有两个窗口/框架,我使用以下代码在它们之间切换:

self.frame1.withdraw()
self.frame2.deiconify()

我使用这个protocole来检测帧何时接近:

self.frame.protocol("WM_DELETE_WINDOW", self.on_closing)

我一直在研究这些协议,我找到了这个文档,但似乎只有三个协议?窗户打开时没有一个? https://www.x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html

编辑:Module1托管frame1,Object2托管frame2。执行代码时会创建所有窗口,但它们是隐藏的,只有主窗口可见。我用withdraw()和deiconify()在帧之间切换。我希望当frame1可见时,Module1会执行一些操作。

1 个答案:

答案 0 :(得分:1)

您可以绑定到<Map>事件,以便在窗口可见时收到通知。

def notify(event):
    print("window was mapped: %s" % event.widget)

window = tk.Toplevel(...)
window.bind("<Map>", notify)

来自官方tk文档:

  

Windows以未映射状态创建。顶级窗口在转换到正常状态时会映射,并在撤消和标志状态下取消映射。当其他窗口置于几何管理器(例如包或网格)的控制之下时,它们将被映射。

     

只有在窗口及其所有祖先都被映射时才能查看窗口。请注意,几何管理器通常不会映射它们的子项,直到它们自己映射为止,并且在它们变为未映射时取消映射所有子项;因此,在Tk Map和Unmap事件中指示窗口是否可见。