2016-08-18 6 views
1

TKinterで作成された入力ボックスに入力された値からリストの値を更新しようとしています。私の例では、ユーザーは実際の名前をリストに入力します。実際の名前はexample_listの 'x'に置き換えられます。Tkinterエントリボックスからリストの値を更新する - Python

メソッド内で変数をグローバルとして指定しましたが、変更はリスト内で反復された2番目の値にのみ適用されます。最初の値は、以下のコードでは99です。

また、i [1]を個別に更新するラムダ関数を指定しようとしましたが、これは正しく動作しません。 quit()関数のほかに、反復を続ける唯一の方法だと思われます。

これをきれいに行う方法はありますか?リストの最初の項目が更新されていますか?

from Tkinter import * 

example_list = [['Jimmy Bob','x','78'],[" Bobby Jim",'x','45'] ,["Sammy Jim Bob",'x','67'] ]  #Nickname/Real Name/Age 

newValue = 99 

def replace(): 
    global newValue 
    newValue = e1.get() 
    print("Their real name is %s" %(e1.get())) 
    #return(newValue) 
    win.quit() 

root = Tk() 

for i in example_list: 

     win = Toplevel(root) 
     #win.lift()            
     e1 = Entry(win) 
     e1.grid(row=1, column=0) 

     var = StringVar() 
     var.set(i[0]) 
     Label(win, textvariable = var).grid(row=0, column=0) 

     Button(win, text='Enter Real Name', command=replace).grid(row=2, column=0, pady=4) 
     #Button(win, text='Enter Real Name', command=lambda: i[1] =replace()).grid(row=2, column=0, pady=4) 

     i[1] = newValue 

     win.mainloop() 

root.mainloop() 

for i in example_list: 
    print(i) 
+3

ここでは何をしようとしていますか?新しいトップレベルウィンドウを作成して終了しますか?どうして?あなたがユーザーからの入力を取得しようとしているだけの場合は、tksimpledialogを使用するだけではどうですか? –

+0

@WayneWernerありがとうございました。あまりにも正直言って、私はこれがオプションであるかどうか分からなかった。 tkinterとtoplevelのための子供の窓を探していた時間は、私が見つけることができたすべてでした。あなたのソリューションは私が持っていたすべての問題を解決します。 – alkey

答えて

0

私をtksimpledialogに向けるWayne Wernerのおかげで、問題の解決方法がここにあります。

from Tkinter import * 
import tkSimpleDialog 

example_list = [['Jimmy Bob','x','78'],[" Bobby Jim",'x','45'] ,["Sammy Jim Bob",'x','67'] ] 

root = Tk() 
root.geometry("400x400") 
Label(root, text = "Enter the names in the dialog").grid(row=0, column=0) 

for i in example_list: 
    root.lower() 
    i[1] = tkSimpleDialog.askstring('Enter their real name', 'What is %s real name' %i[0]) 
    print(i[1]) 


root.mainloop() 
+0

私はあなたがルート部分を必要としないことを確信しています - あなたの 'for'ループは十分であり、それ自身で立つことができます。 –

+0

@WayneWernerありがとうございます、そうです、それは必要ではありません、私はいくつかの情報を追加するためにルート画面を使用する予定でしたが、この質問のために私は編集を行います。 – alkey

関連する問題