非常奇怪的范围错误,我甚至看不到。内部的更新功能的,我有一个嵌套的辅助函数来...帮助瓦特/某事:pygtk:在封闭范围内赋值前引用的自由变量
def attach_row(ws,r1,r2):
es = []
for i,w in enumerate(ws):
eb = gtk.EventBox()
a = gtk.Alignment(xalign=0.0,yalign=0.5)
a.add(w)
eb.add(a)
eb.set_style(self.rowStyle.copy())
es.append(eb)
self.table.attach(eb, i, i+1, r1, r2,
xoptions=gtk.EXPAND|gtk.FILL,
yoptions=gtk.SHRINK)
def ene(_,ev):
for eb in es:
eb.set_state(gtk.STATE_PRELIGHT)
def lne(_,ev):
for eb in es:
eb.set_state(gtk.STATE_NORMAL)
for eb in es:
eb.connect('enter-notify-event', ene)
eb.connect('leave-notify-event', lne)
这一段时间工作的一次,但如果更新()函数运行太多了,我最终得到:
for eb in es:
NameError: free variable 'es' referenced before assignment in enclosing scope
是什么原因造成的?在这些函数被调用之前,es是最可靠的。这不正确吗?有一些奇怪的事情发生在某些原因,在创建新创建时,先前创建的行的ene()会被调用,并且关闭的es
会被覆盖?
hehe,true。我实际上意识到我有一个更好的方法来做到这一点 - 而不是删除和附加很多这些行,我只是创建一组并更改其中的小部件。 尽管如此:我尝试将“es”作为用户数据传递给这些ene和lne函数。发生什么是我不再有NameError,但小工具根本不会突出显示。 SOmething仍然在某处丢失。 如果这再次出现,我会尝试类的想法。 – Claudiu 2009-08-07 06:08:44
甚至更好的方法 - 使用VBox,每行放一个事件框,然后使用sizegroup来对齐列 – Claudiu 2009-08-07 07:07:01
是的,这是在其他情况下发生的。我认为是蟒蛇2.5怪异。仍然没有找到答案 – Claudiu 2010-11-29 21:39:55