2012-11-10 20 views
0

我正在写一个GTK2(技术上是pyGTK)的应用程序,并将执行一些长操作。在执行长操作时在GTK中锁定小部件,但允许重绘

如果我在主线程中执行长操作(这不是一个好主意),那么应用程序将变得没有响应。

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

是否有另一种方法可以做到这一点?

+0

什么阻止您在另一个线程中执行操作? – ergosys

+0

我从来没有在GTK之前的Python程序中完成与UI相关的事情。我不知道如何处理它。 – Raceimaztion

+0

也许这将有助于:http://faq.pygtk.org/index.py?file=faq20.006.htp&req=show – ergosys

回答

2

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

  1. 手动设置它的"sensitive"属性设为False禁用窗口小部件。 widget.set_sensitive(False)
  2. 在您的处理循环的每次迭代中(或每n次迭代),请使用以下代码更新UI:while gtk.events_pending(): gtk.main_iteration()

如果你打算使用线程,ergosys的注释和链接到PyGTK F.A.Q.应该有帮助。您还应该在GTK +参考文档中阅读Threads

相关问题