【发布时间】:2019-07-31 20:21:32
【问题描述】:
我正在 Tkinter 中构建一个 GUI 应用程序,并使用 OOP 方法构建我的程序。我创建了一个 tk.Tk() 实例和一个从 tk.Frame 继承的类,将 Tk() 实例作为参数,我在类中创建了 GUI 及其背后的逻辑。
在类中,我创建了一个画布,在上面放置了一些小部件。我的一个小部件是一个条目,另一个是一个按钮。按钮的命令应该是一个函数,它将条目的 current 值作为输入参数(使用 Entry.get()) 方法并对其执行某些操作,例如将其打印到屏幕上。
这是我重新创建问题的一些代码:
import tkinter as tk
class myClass(tk.Frame):
def __init__(self, master):
super(myClass, self).__init__(master)
self.pack()
self.Widgets()
def getVal(self, val):
print("The value is: ", val)
def Widgets(self):
canvas = tk.Canvas(self, width=500, height=500, bg='green')
canvas.grid(row=0, column=0)
entry = tk.Entry()
button = tk.Button(text='pressme')
button['command'] = lambda arg = entry.get() : self.getVal(arg)
window = canvas.create_window(100, 100, window=entry)
window2 = canvas.create_window(100, 200, window=button)
root = tk.Tk()
root.title("MyGUI")
classinstance = myClass(root)
root.mainloop()
类中的函数 'getVal' 应该打印参数的值在哪里应该是 GUI 条目中的 current 值。问题是我的程序只看到了这个条目的初始值(在这种情况下是一个空字符串),并且在我在运行时更新 GUI 之后没有更改它。
现在我假设这是因为在 main.py 程序中,在应用程序进入 tkinter 的 mainloop() 函数之前,使用一些默认值创建了类实例,一旦进入这个循环函数,我就无法返回内部类并更改值。请帮我纠正这个问题并向我解释如何制作我的应用程序,以便按钮的命令获取条目值的更新版本,而不是初始值。 感谢您阅读我的帖子!
【问题讨论】:
-
你写
lambda arg = entry.get() : self.getVal(arg)而不是lambda: self.getVal(entry.get())有什么原因吗?是什么让您认为这里需要一个默认参数? -
我想让代码更清晰 :D。我想我明白问题所在了。 lambda 函数始终使用 'arg' 的原始值。谢谢你。我怎样才能接受您的解决方案?
-
你不能。如果您愿意,您可以编写并接受您自己的答案。