1

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

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

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

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

4

1 回答 1

0

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

while Gtk.events_pending? do
  Gtk.main_iteration
end
于 2013-07-14T03:09:35.283 回答