Tkinter: 为按钮分配功能时出现按键错误。

问题描述 投票:0回答:1

所以,我有一个相当复杂的程序,我遇到了一个问题,我似乎不能解决它.这是我的程序的问题部分。

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

这里获取 "enter "的内容并不是通过按钮来完成的 而是在程序运行时自动完成的。这不是我想要的,但出于某种原因,它可以工作。

我该怎么做才能使第一段代码正常工作?

python variables tkinter text keyerror
1个回答
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()

0
投票

我需要通过按下按钮来获取名为 "enter "的条目内容。由于我的程序的工作方式,这个名字 "enter "必须存储在一个变量中。

一个比使用更好的解决方案 vars()[variable] 是将你的widget存储在一个字典中。使用 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()
© www.soinside.com 2019 - 2024. All rights reserved.