Быстро и Python Twisted

Я создаю приложение Quickly, которое использует Python Twisted . Когда пользователь запускает окно, я хочу запустить сервер Twisted, который я написал. Однако, когда я делаю это, он замораживает графический интерфейс, потому что метод реактор.рун постоянно работает после его запуска. Мне нужен способ запустить Twisted реактор в его собственном потоке, чтобы GUI продолжал работать, пока реактор работает. Я читал об использовании Twisted с pyGTK в документации по Twisted, но я не уверен, как бы я справился с этим с помощью приложения Quickly. Как лучше всего запустить мой Twisted сервер, когда окно открывается без зависания графического интерфейса?

Обновление :

Мой оператор if __name__ == '__main__' в конце моего диалога файл:

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, а также остальную часть кода, который я хочу запустить при открытии диалога.

0
задан 27 June 2012 в 18:58

1 ответ

Если вы используете привязки python-gi 12.04 или более поздней версии, вам необходимо импортировать и установить twisted.internet.gireactor или twisted.internet.gtk3reactor, прежде чем делать в реакторе.run (). Вы также должны использовать это в качестве основного цикла, а не запускать Gtk.main () или GLib.MainLoop (). Run () самостоятельно. Если вы используете более старую версию и используете старые привязки PyGTK +, вам нужно использовать либо glib2reactor, либо gtk2reactor.

Примерно так:

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().

0
ответ дан 27 June 2012 в 18:58

Другие вопросы по тегам:

Похожие вопросы: