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)
ここでは何をしようとしていますか?新しいトップレベルウィンドウを作成して終了しますか?どうして?あなたがユーザーからの入力を取得しようとしているだけの場合は、tksimpledialogを使用するだけではどうですか? –
@WayneWernerありがとうございました。あまりにも正直言って、私はこれがオプションであるかどうか分からなかった。 tkinterとtoplevelのための子供の窓を探していた時間は、私が見つけることができたすべてでした。あなたのソリューションは私が持っていたすべての問題を解決します。 – alkey