如何从班级致电线程:回到课堂乐趣:?如同,在下面写的课程。有可能吗?
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"
self.wTree.get_widget("entryResult").set_text("Done with One.") # How to call from here back to class fun, which of course is below...?
class fun:
wTree = None
def __init__( self ):
self.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()
答案 0 :(得分:1)
您需要使用对完整对象的正确引用 或者只是(wTree)的一个领域。
self.fun.wTree 如果您将self传递给oneThread类
self.wTree 如果您传递gtk.glade.XML对象
见评论......
class oneThread(threading.Thread):
def __init__(self, reference):
self.fun = reference
#or self.wTree = reference
threading.Thread.__init__(self)
self.start()
def run(self):
print "1"
time.sleep(1)
print "2"
time.sleep(1)
print "3"
self.fun.wTree.get_widget("entryResult").set_text("Done with One.")
# or self.wTree.get_widget("entryResult").set_text("Done with One.")
class fun(object):
def __init__( self ):
self.wTree = gtk.glade.XML( "main.glade" )
self.wTree.signal_autoconnect( {"on_buttonOne" : self.one} )
gtk.main()
def one(self, widget):
oneThread(self)
# or oneThread(self.wTree)
答案 1 :(得分:1)
优雅的解决方案是将类fun实例的引用传递给oneThread构造函数,正如其他人所建议的那样,但您似乎正在尝试做其他事情:将有趣的类作为singleton进行访问,将其作为全局对象进行访问。是对的吗?这通常是一个坏主意,但有时是有道理的。
如果是这种情况,那么你犯了两个错误:
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
。
再一次:这个(使用单例作为一种全局变量)可能不是可行的方法。
答案 2 :(得分:0)
您需要将fun
实例传递给oneThread
构造函数:
class oneThread(threading.Thread):
def __init__(self, fun):
self.fun = fun
...
class fun:
def one(self, widget):
oneThread(self):