Элегантным решением было бы передать ссылку на экземпляр класса fun конструктору oneThread, как предлагали другие, но вы, похоже, пытаетесь сделать что-то другое: сделать класс fun как одиночный доступ доступом к нему как глобальному объекту. Это правильно? Обычно это плохая идея, но иногда имеет смысл.
Если это так, то вы делаете две ошибки:
- вы используете
self.fun
в oneThread.run
, хотя 'fun' не является частью класса oneThread или его экземпляра. Вы должны использовать просто «веселье», чтобы получить доступ к классу «веселье». Неважно, что он определен ниже, так как код будет выполнен, когда класс уже определен.
- в
fun.__init__
вы не пишете атрибут класса fun.wTree
, но создаете атрибут экземпляра wTree
. Атрибут класса fun.wTree
останется None
. Чтобы изменить это
вместо этого используйте fun.wTree = gtk.glade.XML( "main.glade" )
(хотя вы можете продолжать использовать self.wTree
для доступа к нему позже).
Таким образом, код будет выглядеть так:
class oneThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.start()
def run(self):
print "1"
time.sleep(1)
print "2"
time.sleep(1)
print "3"
fun.wTree.get_widget("entryResult").set_text("Done with One.")
class fun:
wTree = None
def __init__( self ):
fun.wTree = gtk.glade.XML( "main.glade" )
self.wTree.signal_autoconnect( {"on_buttonOne" : self.one} )
gtk.main()
def one(self, widget):
oneThread();
gtk.gdk.threads_init()
do=fun()
Я бы также предложил переименовать атрибут wTree
в instance
и в этом случае
И еще раз: это (использование синглтона в качестве глобальной переменной), вероятно, не тот путь.