2013-07-13 89 views
1

我在我的ruby gtk2應用程序中使用了一個按鈕,它啓動了一個長時間的作業處理,我想在處理時禁用該按鈕,以便用戶不會意外地運行它兩次。我想設置button.sensitive = false會做的工作,用下面的代碼進行了測試:Ruby gtk2:button.sensitive = false - 事件仍然排隊

button.signal_connect(:clicked) do 
    button.sensitive = false 
    puts "clicked" 
    sleep 5 
    button.sensitive = true 
end 

點擊按鈕上的工作開始後,似乎仍然把:clicked事件堆棧上,所以如果我按一下按鈕時的兩倍多sleep,'clicked'在控制檯窗口中顯示三次,當我預料它只會出現一次。

我誤解了這是如何工作的?如果它不能按我期望的方式工作,那麼在作業完成後是否有辦法清除事件堆棧?

+0

沒有信號處理程序返回到主循環成爲設置有效嗎?只是猜測,到目前爲止還沒有用過Gtk2。 – Torimus

回答

0

謝謝你,托裏莫斯 - 指出我在正確的方向。顯然這有助於你閱讀文檔,特別是Gtk.events_pending?!在設置button.sensitive以強制主循環完成之後添加以下內容:

while Gtk.events_pending? do 
    Gtk.main_iteration 
end 
相關問題