Мне нужно включить функцию из моего главного окна и запустить эту функцию, потому что она проверяет какое-либо состояние (это функция again(), и я удалил проверку из этого примера). Эта функция должна оставаться неизменной, как сейчас. Но главное окно висит. Пожалуйста помоги.Главное окно python зависает с таймером
# -*- coding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk
import gobject
import time
gtk.gdk.threads_init()
class App:
def __init__(self):
self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.okno.resize(400,150)
self.okno.show_all()
self.again()
def again(self):
i=0
while 1:
print i
i=i+1
if __name__ == "__main__":
app = App()
gtk.threads_enter()
gtk.main()
gtk.threads_leave()
ИЗМЕНЕНО:
# -*- coding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk
import gobject
import time
import threading, sys
gtk.gdk.threads_init()
class App(threading.Thread):
def __init__(self):
self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.okno.resize(400,150)
self.okno.show_all()
self.again()
def again(self):
i=0
while 1:
print i
sys.stdout.flush()
i=i+1
time.sleep(1)
if __name__ == "__main__":
gtk.threads_enter()
threading.Thread(target=App).start()
gtk.threads_leave()
gtk.main()
Вы не используете темы правильно. Вы должны сказать 'gtk.threads_enter()' непосредственно перед 'app = App()' и 'gtk.threads_leave()' сразу после. Тем не менее, вы даже не используете потоки, поэтому вы также должны изменить 'app = App()' на 'threading.Thread (target = App) .start()'. Вам нужно будет импортировать 'threading'. – zondo
Зондо, спасибо. Я изменил свой код, но он работает не так, как ожидалось. Я что-то упускаю? – peter
Скорее всего, печать чего-либо без пауз * и *, связанных с событиями окна, слишком велика для обработки. – zondo