2017-08-06 82 views
2

是否有事件或检测窗口打开/重新打开的方式?检测窗口何时被打开

我有两个窗口/帧,我它们之间用下面的代码转换:

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()在帧之间切换。我希望Module1在frame1可见时执行一些操作。

+0

这是您自己的代码创建新窗口。你为什么需要通知? –

+0

@BryanOakley我不需要通知'创建'窗口。而是为了展示它。我可能忘记指出每个帧都是在不同的对象中完成的。 –

回答

1

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

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

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

从官方文档TK:

的Windows在未映射的状态被创建。顶层窗口在转换到正常状态时变为映射,并且在撤回和图标状态下未映射。其他窗口在放置在几何管理器(例如包或网格)的控制下时会被映射。

仅当窗口及其所有祖先被映射时才可以查看窗口。请注意,几何管理器通常在映射自己的子图之前不映射其子级,并在所有子级未映射时取消映射;因此在Tk Map和Unmap事件中指示窗口是否可见。

相关问题