Ruby gtk2:button.sensitive = false - 事件仍然排队

时间:2013-07-13 07:57:23

标签: ruby gtk2

我在我的ruby gtk2应用程序上使用了一个按钮,它启动了一个漫长的作业处理,我想在处理时禁用该按钮,这样用户就不会意外地运行它两次。我认为设置button.sensitive = false会完成工作并使用以下代码对其进行测试:

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

在作业开始后单击按钮仍然似乎将:clicked个事件放在堆栈上,所以如果我在sleep期间再次点击该按钮两次,则“点击”会在控制台窗口,我预计它只会出现一次。

我是否误解了这是如何工作的?如果它不能按我预期的方式工作,有没有办法在作业完成后清除事件堆栈?

1 个答案:

答案 0 :(得分:0)

谢谢你,Torimus - 指出了我正确的方向。显然,如果您阅读文档,特别是Gtk.events_pending?的文档,它会有所帮助!在设置button.sensitive以强制主循环执行其操作后添加以下内容:

while Gtk.events_pending? do
  Gtk.main_iteration
end