Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2011 11:02:30

FONTER
От:
Зарегистрирован: 2010-09-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyGTK+потоки

Здравствуйте, уважаемые форумчане. Пишу небольшой скрипт, хотелось бы к нему прикруртить ГИП (GUI), но возникают проблемы. Например, есть код:

...
...
gui = Gui()
database = DataBase()
tmp1 = 1
tmp3 = 0
while 1:
tmp2 = database.results() # Делаем запрос в db
if tmp1 != tmp2:
gui.start()
gtk.main()
tmp1 = tmp2
tmp3 += 1
print tmp3
...
...
Как заставить gtk.main() не тормозить программу? Мой код полностью работает, но к сожалению, gtk.main() останавливает его до закрытия окна.
Заранее спасибо!



Офлайн

#2 Дек. 12, 2011 15:09:44

plastun
От:
Зарегистрирован: 2011-01-18
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

PyGTK+потоки

gtk.main() запускает цикл обработки событий GTK, поэтому весь код, расположенный за gtk.main() выполнится только при выхода из этого цикла.
Запускайте задачу по обработке данных из БД в отдельном потоке, а GUI будет в своем потоке.



Офлайн

#3 Дек. 13, 2011 13:34:57

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Офлайн

#4 Дек. 16, 2011 08:32:23

FONTER
От:
Зарегистрирован: 2010-09-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

PyGTK+потоки

Всем спасибо.
Проблему решил следующим способом:

def call_main_loop():
gtk.gdk.threads_init()
gtk.gdk.threads_enter()
gtk.main()
gtk.gdk.threads_leave()


gui = Gui()
database = DataBase()

gui_thread = threading.Thread(target=call_main_loop, name="t1")
gui_thread.start()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version