Tkinter:将功能分配给按钮

时间:2020-05-06 20:28:21

标签: python variables tkinter text keyerror

因此,我的程序相当复杂,并且遇到了我似乎无法解决的问题。 这是我程序中有问题的部分:

import tkinter as tk
window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()

def hi():
    text = vars()[variable].get()

button = tk.Button(text = "Click", command = hi)
button.pack()

我需要通过按一下按钮获取名为“ enter”的条目的内容。由于我的程序是如何工作的,因此必须将这个名称“ enter”存储在一个变量中,在这里我将其称为“ variable”。 发生的是,当我按下按钮时,出现了KeyError。

更奇怪的是,当我执行以下操作时,该程序实际上可以正常工作:

import tkinter as tk
window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()


text = vars()[variable].get()

button = tk.Button(text = "Click")
button.pack()

这里获取“输入”的内容不是用按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但是由于某种原因它可以工作。

如何使第一个代码正常工作?

2 个答案:

答案 0 :(得分:0)

vars函数中本地执行hi时,将创建一个新的dict对象,该对象不同于全局创建的dict对象。
您可以保存对变量的引用,并在hi函数中使用该变量。

import tkinter as tk

window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()

d = vars()

def hi():
    text = d[variable].get()

button = tk.Button(text="Click", command=hi)
button.pack()

window.mainloop()

答案 1 :(得分:0)

我需要通过按一下按钮获取名为“ enter”的条目的内容。由于我的程序是如何工作的,因此必须将这个名称“ enter”存储在变量中,

比使用vars()[variable]更好的解决方案是将小部件存储在字典中。 vars()的使用几乎没有价值,以使代码更难以理解为代价。

import tkinter as tk

window = tk.Tk()
variable = "enter"

widgets = {}
widgets[variable] = tk.Entry()
widgets[variable].insert(0, "hello")
widgets[variable].pack()

def hi():
    text = widgets[variable].get()
    print(text)

button = tk.Button(text = "Click", command = hi)
button.pack()