2014-02-07 57 views
0

我需要一個類似於tcl/tk 8.6下的「tk busy」的函數,即只接受第一次點擊按鈕,忽略進一步的點擊直到執行調用的命令已完成。 不幸的是,我必須使用8.5.9 ...阻止多次點擊的Tcl/Tk按鈕

我已經嘗試綁定一個自定義proc single_invoke,在我調用的過程中查看全局變量設置爲1。這顯然不起作用,因爲顯然事件正在排隊,所以第二次點擊將在我的proc返回之後被調用(並且全局設置回0 ...)

更新(在解答中的答案)

proc on_button_click {} { 
    grab .lExistingLabel 
    #lengthy code 
    update; #to release any queued events 
    grab release .lExistingLabel 
} 

謝謝!

+0

請張貼一些代碼 –

回答

2

創建一個幾乎不可見的小部件 - 例如1x1幀 - 並將其放置在不顯眼的位置,如應用程序的一個角落。當你點擊一個按鈕時,抓住那個小部件。抓鬥會將所有事件彙集到該小部件,直到您釋放抓鬥。

+0

作爲一種改進,還可以將該小部件放置在總是被剪輯的位置或其他小部件下。它必須是一個現有的,被管理的小部件;如果你不管理'frame'(這對接收器來說是一個不錯的選擇,因爲它沒有默認行爲給你帶來驚喜),它將不起作用。 –