首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和Python Twisted

Python和Python Twisted
EN

Ask Ubuntu用户
提问于 2012-06-25 13:50:20
回答 1查看 586关注 0票数 0

我正在创建一个使用Python Twisted的快速应用程序。当用户启动窗口时,我希望启动我编写的Twisted服务器。但是,当我这样做时,它会冻结GUI,因为reactor.run方法在启动后一直在运行。我需要一种方法来启动Twisted反应堆在它自己的线程,这样GUI将继续运行时,反应堆运行。我读过在Twisted文档中使用Twisted with pyGTK的文章,但我不知道如何用一个快速的应用程序来完成这个任务。当窗口打开而不冻结GUI时,启动Twisted服务器的最佳方法是什么?

更新

我在对话框文件末尾的if __name__ == '__main__'语句是:

代码语言:javascript
复制
print 'Preparing GLib'
GLib.idle_add(before_running)
print 'Staring Reactor'
from twisted.internet import reactor
reactor.run()`

我在前面的文件中导入并安装了twisted.gtk3reactor。before_running方法包含dialog = ClientDialog()dialog.show,以及我想在对话框打开时运行的其余代码。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2012-06-25 13:56:24

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

就像这样:

代码语言:javascript
复制
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()

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/155801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档