Tkinter 通过命令 lambda 传递 StringVar.get 给出初始值
Tkinter Passing StringVar.get through command lambda gives initial value
好的,所以我正在尝试使用 Tkinter 创建一个菜单系统,并试图将下拉菜单的字符串值保存到 class 变量中。我有代码来处理那部分,但问题在于将字符串值获取到我编写的函数中。我知道问题不是我的功能,因为我在下面的示例中使用打印功能。
import tkinter as tk
from enum import Enum
class CustomEnum(Enum):
Option1 = 'Option1'
Option2 = 'Option2'
class window():
def __init__(self, root):
self.value = CustomEnum.Option1
test = tk.StringVar()
test.set(self.value.value)
tk.OptionMenu(root, test, *[e.value for e in CustomEnum], command = lambda
content = test.get() : print(content)).pack()
tk.Button(root, text="Save",
command = lambda content = test.get() : print(content)).pack()
root = tk.Tk()
test = window(root)
root.mainloop()
如果您 运行 此代码,无论您选择了什么选项,或者如果您添加或删除元素(除了删除选项 1),它都会不断地打印“选项 1”。
问题出在这一行
tk.Button(root, text="Save",
command = lambda content = test.get() : print(content)).pack()
您正在为 content
分配当时 test.get()
的值 (Option1
),并且它继续保持不变。
因为你想要 test.get()
的当前值,你必须这样做
command = lambda: print(test.get())).pack()
此外,我认为您拼错了 customEnum
而不是 CustomEnum
。
好的,所以我正在尝试使用 Tkinter 创建一个菜单系统,并试图将下拉菜单的字符串值保存到 class 变量中。我有代码来处理那部分,但问题在于将字符串值获取到我编写的函数中。我知道问题不是我的功能,因为我在下面的示例中使用打印功能。
import tkinter as tk
from enum import Enum
class CustomEnum(Enum):
Option1 = 'Option1'
Option2 = 'Option2'
class window():
def __init__(self, root):
self.value = CustomEnum.Option1
test = tk.StringVar()
test.set(self.value.value)
tk.OptionMenu(root, test, *[e.value for e in CustomEnum], command = lambda
content = test.get() : print(content)).pack()
tk.Button(root, text="Save",
command = lambda content = test.get() : print(content)).pack()
root = tk.Tk()
test = window(root)
root.mainloop()
如果您 运行 此代码,无论您选择了什么选项,或者如果您添加或删除元素(除了删除选项 1),它都会不断地打印“选项 1”。
问题出在这一行
tk.Button(root, text="Save",
command = lambda content = test.get() : print(content)).pack()
您正在为 content
分配当时 test.get()
的值 (Option1
),并且它继续保持不变。
因为你想要 test.get()
的当前值,你必须这样做
command = lambda: print(test.get())).pack()
此外,我认为您拼错了 customEnum
而不是 CustomEnum
。