【问题标题】:Updating values in a list from a Tkinter entry box - Python从 Tkinter 输入框更新列表中的值 - Python
【发布时间】: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


【解决方案1】:

感谢 Wayne Werner 将我引向 tksimpledialog,问题的解决方案就在这里。

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()

【讨论】:

  • 我很确定你不需要根部分 - 你的 for 循环就足够了,可以独立存在。
  • @WayneWerner 谢谢,是的,你是对的,不需要,我打算使用根屏幕添加更多信息,但对于这个问题,没有必要,所以我会进行编辑。
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多