非常奇怪的作用域错误,我甚至看不到。在更新程序函数内部,我有一个嵌套的辅助函数来......帮助处理某些事情:
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)
这个有时候能够正常工作,但如果update()函数运行得太频繁,最终会出现以下错误:
for eb in es:
NameError: free variable 'es' referenced before assignment in enclosing scope
是什么导致了这个问题?es肯定在那些函数被调用之前就被分配了。对吗?是否发生了一些奇怪的事情,即在创建新行时调用了先前创建的行的ene(),并且闭合的es
被覆盖了?