非常奇怪的范围界定错误,我什至看不到。在更新器函数内部,我有一个嵌套的辅助函数来...帮助 w/ 一些东西:
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
被覆盖了?