2017-08-06 84 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事件中指示窗口是否可見。