快速使用 Python Twisted

快速使用 Python Twisted

我正在创建一个快速应用程序,它利用Python Twisted。当用户启动窗口时,我想启动我编写的 Twisted 服务器。但是,当我这样做时,它会冻结 GUI,因为反应器运行方法在启动后会持续运行。我需要一种方法来在自己的线程中启动 Twisted 反应器,这样 GUI 将在反应器运行时继续运行。我已在 Twisted 文档中阅读了有关使用 Twisted 和 pyGTK 的信息,但我不确定如何使用 Quickly 应用程序来实现这一点。在打开窗口时启动 Twisted 服务器而不冻结 GUI 的最佳方法是什么?

更新

我的if __name__ == '__main__'对话文件末尾的声明是:

print 'Preparing GLib'
GLib.idle_add(before_running)
print 'Staring Reactor'
from twisted.internet import reactor
reactor.run()`

我已经导入并安装twisted.gtk3reactor该文件中较早的部分。运行前方法包含dialog = ClientDialog()dialog.show,以及我想要在对话框打开时运行的其余代码。

答案1

如果您在 12.04 或更新版本上使用绑定python-gi,则需要在执行 react.run() 之前导入并安装twisted.internet.gireactortwisted.internet.gtk3reactor。您还需要将其用作主循环,而不是自己运行 Gtk.main() 或 GLib.MainLoop().run()。如果您使用的是旧版本并使用旧的 PyGTK+ 绑定,则需要使用glib2reactorgtk2reactor

像这样:

from twisted.internet import gtk3reactor
from gi.repository import GLib
gtk3reactor.install()

GLib.idle_add(create_windows_and_do_stuff_method)
from twisted.internet import reactor

reactor.run()

顺序很重要,因为如果尚未安装反应器,则导入默认反应器将导致安装该反应器,而不是安装适当的反应器。因此,您需要先安装适当的反应器,然后执行reactor.run()。并且Gtk.main_quit(),您应该from twisted.internet import reactor使用 而不是reactor.stop()

相关内容