私が見ることさえできない非常に奇妙なスコープエラー。アップデータ関数の内部には、ネストされたヘルパー関数があります...何かを支援します:
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が上書きされるという奇妙なことが起こっていますか?