2011-07-21 10 views
1

私は、PythonとTkinterを使ってラベルとエントリーフィールドのリストを持つ小さなプログラムを作成しようとしています。ウィジェットの追加は問題ありません。しかし、インスタンスの1つ(Entry-fieldの1つに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()ので、あなたはあなたのリストに保存されているすべてのNoneで、NoneTypeオブジェクトを返します。最初に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を起動する前にこの問題に遭遇しました。私は何かを作ってグリッドの位置を設定するのに2本の線を取るのはなぜですか?私はそれをすべて一つにします。面白い話ですが、 '.grid'はNoneを返します。だから私はあなたが実際にここに何かを追加しているとは思わない。

+0

Yupp、それはそれだった...上記の私のコメントを参照して、私は考えたはずです。ありがとう – McWolfe

関連する問題