我在我的ruby gtk2应用程序上使用了一个按钮,它启动了一个漫长的作业处理,我想在处理时禁用该按钮,这样用户就不会意外地运行它两次。我认为设置button.sensitive = false
会完成工作并使用以下代码对其进行测试:
button.signal_connect(:clicked) do
button.sensitive = false
puts "clicked"
sleep 5
button.sensitive = true
end
在作业开始后单击按钮仍然似乎将:clicked
个事件放在堆栈上,所以如果我在sleep
期间再次点击该按钮两次,则“点击”会在控制台窗口,我预计它只会出现一次。
我是否误解了这是如何工作的?如果它不能按我预期的方式工作,有没有办法在作业完成后清除事件堆栈?
答案 0 :(得分:0)
谢谢你,Torimus - 指出了我正确的方向。显然,如果您阅读文档,特别是Gtk.events_pending?
的文档,它会有所帮助!在设置button.sensitive
以强制主循环执行其操作后添加以下内容:
while Gtk.events_pending? do
Gtk.main_iteration
end