非常奇怪的範圍錯誤,我甚至看不到。內部的更新功能的,我有一個嵌套的輔助函數來...幫助瓦特/某事: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