【发布时间】:2016-08-18 16:04:16
【问题描述】:
我正在尝试根据输入到 TKinter 中创建的输入框中的值更新列表中的值。在我的示例中,用户在列表中输入人员的真实姓名。他们的真实姓名将替换 example_list 中的“x”。
我已在方法中将变量指定为全局变量,但更改仅适用于列表中迭代的第二个值 - 第一个是初始化值 - 下面代码中的 99。
我还尝试指定一个单独更新 i[1] 的 lambda 函数,但这不起作用 - 语法错误。此外,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 和顶层的子窗口是我能找到的。您的解决方案解决了我遇到的所有问题。
标签: python python-2.7 tkinter