Использовать тему в Pygtk - PullRequest
0 голосов
/ 30 июля 2011

Я занимаюсь разработкой приложения для чата, такого как netmeeting. Я хочу отделить поток, один для GUI (gtk.main), другой одновременно принимает запрос чата клиента (socket.accept). Но есть проблема ..

Вот моя простая строка кода, которая является вторым потоком для принятия клиентского запроса:

while True:
    self.new_sock,self.client_addr = self.sock.accept()
    #CloseDialog is a messege box
    respons=self.CloseDialog.run()
    if respons==gtk.RESPONSE_YES:
        #Call a Chat Window         
    elif respons==gtk.RESPONSE_NO:
        #Close the requested socket

когда я запускаю приложение, оно переключается на цикл gtk.main, и мой 2-й поток не может работать. Есть ли какой-либо процесс для запуска этих потоков параллельно, но я очень запутался, чтобы реализовать это. если вам нужна дополнительная информация, я передам ее вам. Пожалуйста, помогите мне.. заранее спасибо

1 Ответ

1 голос
/ 30 июля 2011

Ознакомьтесь с PyGTK FAQ .В частности, я предлагаю подход gobject.idle_add().Когда вашему второму потоку нужно какое-либо взаимодействие с GUI, запланируйте некоторый код, выполняющийся в главном потоке, с помощью `gobject.idle_add (), примерно так:

def ask_close ():
    self.CloseDialog.run ()
gobject.idle_add (ask_close)

Затем вам нужно будет подождать некоторый мьютекс X для когда приходит ответ (в основном потоке).Я также рекомендую не использовать модальные диалоги (run()), потому что это в значительной степени противоречит цели иметь несколько потоков.Вместо этого используйте present() и подключите обратный вызов к сигналу response.Этот обратный вызов освободит мьютекс X, чтобы второй поток мог перестать ждать и обработать ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...