2011-11-02 83 views
3

我正在使用Tcl/Tk來構建GUI,對於Linux環境,我發現可以在窗口的「x」按鈕上「捕捉」按鈕(關閉程序的右上角的按鈕)。使用Tk捕捉「x」按鈕的點擊Tcl

我該如何捕捉這些事件?

回答

7

採取請求的控制,以刪除一個窗口,配置適當的協議處理程序:

wm protocol . WM_DELETE_WINDOW { 
    if {[tk_messageBox -message "Quit?" -type yesno] eq "yes"} { 
     exit 
    } 
} 

默認行爲(即,如果該協議處理程序是字符串)是剛剛destroy頂層請求被提出。

5

使用wm protocolcommand綁定到WM_DELETE_WINDOW「協議消息」。

另外請注意,如果你只是想跟蹤窗口破壞(在更高的水平),只需bind到它的<Destroy>事件。

+2

在頂層上綁定到''可能會很棘手,因爲你也可以爲頂層的子部件獲取它(由於一般事件處理規則)。 –

+0

@Donal Fellows,同意。一個訣竅就是在回調中嵌入我們自己的窗口名稱,然後跳過這些僞造的調用,就像'bind $ w [list cb $ w%W]; proc cb {w1 w2} {if {$ w1 ne $ w2} return; #否則做任何需要} – kostix

+1

我已經在過去做過。另一種方法是查看事件窗口是否與事件窗口的頂層相同:'if {「%W」eq [winfo toplevel%W}} ...'(或者在過程中是等價的)。 –