<p>优雅的解决方案是将对类fun实例的引用传递给oneThread构造函数,正如其他人建议的那样,但是您似乎在尝试做其他事情:将fun类作为单例作为全局对象访问它。对吗?这通常是个坏主意,但有时也有道理。在</p>
<p>如果是这样,那么你犯了两个错误:</p>
<ol>
<li>在<code>oneThread.run</code>中使用<code>self.fun</code>,尽管'fun'不是oneThread类或其实例的一部分。你应该使用“fun”来访问“fun”类。在下面定义它并不重要,因为代码将在类已经定义后执行。在</li>
<li>在<code>fun.__init__</code>中,不是编写类属性<code>fun.wTree</code>,而是创建一个实例属性<code>wTree</code>。类属性<code>fun.wTree</code>将保留<code>None</code>。去改变它
改用<code>fun.wTree = gtk.glade.XML( "main.glade" )</code>(不过,以后可以继续使用<code>self.wTree</code>来访问它)。在</li>
</ol>
<p>所以代码应该是这样的:</p>
<pre><code>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()
</code></pre>
<p>在这种情况下,我还建议将<code>wTree</code>属性重命名为<code>instance</code>。在</p>
<p>再说一次:这(使用单例变量作为一种全局变量)可能不是正确的方法。在</p>