2013-05-30 79 views
0

一直在用這個撞牆撞我的頭。剛剛拿到Tkinter的繩索,跟着一個教程來獲得基礎知識,現在正在努力實現我自己的東西。我爲我正在做的一些工作創建了一個查詢界面。我在屏幕上有三個列表框,並且我需要從按鈕單擊中的所有三個選擇中選擇,以便可以生成查詢並顯示一些數據。Tkinter listbox獲取屬性錯誤

我收到的錯誤似乎說它看不到mapLBox,表明範圍問題。如果我將代碼更改爲諸如print self.mapLBox.get(Tkinter.ACTIVE)之類的簡單代碼,它仍會拋出相同的屬性錯誤。所有框和滾動條都正確繪製到屏幕上,並且錯誤的線條(#90)註釋掉了,它運行良好。

有兩個類,simpleApp_tkPasteBin),以下所有代碼都屬於,dbtools在數據庫上運行查詢並返回結果。

錯誤:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1473, in __call__ 
     return self.func(*args) 
    File "test.py", line 90, in OnButtonClick 
     self.labelVar.set(self.mapLBox.get(self.mapLBox.curselection()[0])) 
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1829, in __getattr__ 
     return getattr(self.tk, attr) 
AttributeError: mapLBox 

裏面我initialise方法(從__init__運行)的列表和按鈕創建:

button = Tkinter.Button(self,text=u"Click Me",command=self.OnButtonClick) 
button.grid(column=1,row=0) 

# Make a scrollbar for the maps list 
scrollbar2 = Tkinter.Scrollbar(self,orient=Tkinter.VERTICAL) 
scrollbar2.grid(column=2,row=2,sticky='EW') 

# Create list of maps 
mapLBox = Tkinter.Listbox(self,selectmode=Tkinter.SINGLE,exportselection=0, yscrollcommand=scrollbar2.set) 
scrollbar2.config(command=mapLBox.yview) 
mapLBox.grid(column=2,row=2,sticky='EW') 

# Populate map list 
nameList = self.db.getMapNameList() 
IDList = self.db.getMapIDList() 
for count, name in enumerate(nameList): 
    nameFormat = str(IDList[count][0])+': '+name[0] 
     mapLBox.insert(Tkinter.END,nameFormat) 

self.grid_columnconfigure(0,weight=1) # Allow resizing of window 
self.resizable(True,True) # Contrain to only horizontal 
self.update() 
self.geometry(self.geometry()) 

OnButtonClick方法連接到我的按鈕:

def OnButtonClick(self): 
    self.labelVar.set(self.mapLBox.get(self.mapLBox.curselection()[0])) 
    return 

回答

1

您正在訪問self.mapLBox但您並未定義self.mapLBox。僅僅因爲你創建了名爲mapLBox的變量並不意味着它會自動成爲對象的一個​​屬性。

您需要更改此:

mapLBox = Tkinter.Listbox(...) 

...這樣的:

self.mapLBox = Tkinter.Listbox(...) 

...,當然下,更改引用mapLBox其他地方。

+0

一個明顯的,我怎麼錯過了!謝謝! – Tomassino