문제

I've reduced my problem down to this simple example script:

#! /usr/bin/python

import hello
from threading import Thread

def myfunc():

        hello.HelloWorld().main()

t = Thread(target=myfunc)
t.start()

print '\nstill running ???'

The problem is I'm trying to find someway to get around the blocking behavior of the gtk event loop. Is this possible? As you can see, even if I call the class from a separate thread the event loop blocks further progress in the main script ("still running ???" is not printed until the gtk application is closed)

도움이 되었습니까?

해결책

You should read the threading best practice for pyGTK. GTK should be used in the main thread, but still, I agree that is strange.

I've tried the following code:

#! /usr/bin/python

import gtk
from time import sleep
from threading import Thread


def myfunc():
    w = gtk.Window()
    l = gtk.Label()
    w.add(l)
    w.show_all()
    w.connect("destroy", lambda _: gtk.main_quit())
    gtk.main()

def myfunc2():
    sleep (3)

t = Thread(target=myfunc)
#t = Thread(target=myfunc2)
t.start()

print '\nstill running ???'

And what is worse, is that almost always the message will be printed after closing the app, but sometimes it appears before. So, there's a strange behavior here.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top