2011-07-21 34 views
1

我想寫一個小程序,其中有一個使用Python和Tkinter的標籤和入門字段列表(請參閱下面的代碼)。添加小部件是沒有問題的。但是,當我想要使用其中一個實例的方法時(比如在其中一個入口字段上使用Insert()),我無法找到一種方法來實現它。訪問列表中的Tkinter小部件的問題

我的代碼如下所示:

from Tkinter import * 
import random 
root = Tk() 

attributes = {'Strength':10, 'Dexterity':10, 'Constitution':10, 'Intelligence':10, 'wisdom':10, 'charisma':10} 
entries = [] 
labels = [] 

i = 0 
for a in attributes: 
    labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W)) 
    entries.append(Entry(root).grid(column = 1, row = i)) 
    i = i+1 

root.mainloop() 

,我已經嘗試了簡單

entries[i].insert("text to insert") 

e = Entry 
e = entries[i] 
e.insert... 

,但它並沒有幫助。我已經看到其他人試圖在列表中使用對象的例子,而且看起來他們只是像我第一次嘗試時那樣做。我錯過了什麼嗎?

感謝

+0

你錯過的是錯誤信息。它告訴你什麼?如果ypu從字面上看這個錯誤信息,它會導致你發現什麼? –

回答

4

Entry(root).grid()返回NoneType對象,因此,所有你存儲在你的名單None。您可以先創建Entry小部件,然後致電grid(),然後將其附加到您的列表中。

from Tkinter import * 
import random 
root = Tk() 
attributes = {'Strength':10, 'Dexterity':10, 'Constitution':10, 'Intelligence':10, 'wisdom':10, 'charisma':10} 
entries = [] 
labels = [] 


for i,a in enumerate(attributes): 
    labels.append(Label(root, text = a, justify = LEFT).grid(sticky = W)) 
    e = Entry(root) 
    e.grid(column=1, row=i) 
    entries.append(e) 
    entries[i].insert(INSERT,"text to insert") 



root.mainloop() 
+0

謝謝!就是這樣(我本來應該想出來的......我做了一個打印條目,我得到的都是(none,none ...)) – McWolfe

+0

'labels'仍然是'None'值列表,但是... – martineau

1

我在啓動Python之前遇到過這個問題。我就是這樣說的:「爲什麼要用兩條線創建一些東西並設置網格位置,我會把它放在一個上面。」有趣的故事,'.grid'返回無。所以我不認爲你在這裏附加任何東西。

+0

尤普,就是這樣......看到我上面的評論,我應該想通了。謝謝 – McWolfe