执行长操作时在GTK中锁定小部件,但允许重绘

时间:2012-11-10 00:54:10

标签: python gtk pygtk gtk2

我正在用GTK2(技术上是pyGTK)编写一个应用程序,并将执行一些长时间的操作。

如果我在主线程中执行长操作(这不是一个好主意),应用程序将无法响应。

这个部分是防止用户修改文本输入小部件的部分,但不希望的部分是窗口不会重新绘制自己。

还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

如果GUI在昂贵的过程中不需要用户交互,那么就没有理由不在主线程中。您仍然可以在循环中手动更新UI(重绘,处理移动/调整窗口大小等)

  1. 通过将小部件的"sensitive"属性设置为False来禁用小部件。 widget.set_sensitive(False)
  2. 在处理循环的每次迭代(或每n次迭代)期间,使用以下代码更新UI:while gtk.events_pending(): gtk.main_iteration()
  3. 如果你打算使用线程,那么ergosys的注释会带有PyGTK F.A.Q的链接。应该有所帮助您还应该阅读GTK +参考文档中的Threads