Rapidamente e Python Twisted

0

Estou criando um aplicativo do Quickly que faz uso do Python Twisted . Quando o usuário inicia uma janela, quero iniciar o servidor Twisted que escrevi. No entanto, quando faço isso, ele congela a GUI, porque o método reactor.run está em constante execução após ser iniciado. Eu preciso de uma maneira de iniciar o reator Twisted em seu próprio thread, para que a GUI continue a operar enquanto o reator estiver funcionando. Eu li sobre o uso do Twisted com pyGTK na documentação do Twisted, mas não tenho certeza de como eu conseguiria isso com um aplicativo do Quickly. Qual é a melhor maneira de iniciar meu servidor Twisted quando uma janela é aberta sem congelar a GUI?

Atualizar :

Minha declaração if __name__ == '__main__' no final do meu arquivo de diálogo é:

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

Eu importei e instalei twisted.gtk3reactor anteriormente no arquivo. O método before_running contém dialog = ClientDialog() e dialog.show , bem como o restante do código que quero executar quando a caixa de diálogo é aberta.

    
por Aaron Hill 25.06.2012 / 15:50

1 resposta

2

Se você estiver usando as associações python-gi no 12.04 ou mais recente, precisará importar e instalar o twisted.internet.gireactor ou twisted.internet.gtk3reactor antes de fazer o reactor.run (). Você também precisa usar isto como seu loop principal, ao invés de executar Gtk.main () ou um GLib.MainLoop (). Run () você mesmo. Se você estiver em uma versão mais antiga e usando as ligações antigas do PyGTK +, será necessário usar glib2reactor ou gtk2reactor .

Algo parecido com isto:

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

A sequência é importante, pois a importação do reator padrão resultará na instalação, em vez do reator apropriado, se um reator ainda não estiver instalado. Assim, primeiro você precisa instalar o apropriado e, em seguida, fazer o reactor.run() . E, em vez de Gtk.main_quit() , você deve from twisted.internet import reactor e usar reactor.stop() .

    
por dobey 25.06.2012 / 15:56