【发布时间】:2022-01-19 12:35:47
【问题描述】:
我正在尝试创建一个用于与微控制器通信的 tkinter GUI。
我想创建一堆 Button - Entry 对,每个对都会向微控制器发送一个命令以及每个 Entry 的输入(特定于该命令的格式)。
我想通过遍历包含按钮名称和 Entry 小部件的格式化函数的列表来创建按钮。
请参阅下面的代码以获取示例。
import tkinter as tk
root = tk.Tk()
class ButtonEntryFrame():
def __init__(self, parent, params, txtVar) -> None:
self.txt = params[0]
self.fn = params[1]
self.txtVar = txtVar
self.frame = tk.Frame(parent)
self.button = tk.Button(self.frame, text=self.txt, command=self.fn(self.txtVar))
self.entry = tk.Entry(self.frame, textvariable=self.txtVar)
self.button.pack(side=tk.LEFT)
self.entry.pack()
self.frame.grid()
frameInput = tk.Frame(root)
frameInput.pack(side=tk.LEFT)
inputFunctions = [
('Func A', lambda x: print(f"startMotor {x} 0 1")),
('Func B', lambda x: print(f"stopMotor")),
('Func C', lambda x: print(f"increaseSpeed 100 {x} 3"))]
frames = []
for i, params in enumerate(inputFunctions):
txtVar = tk.StringVar()
f = ButtonEntryFrame(frameInput, params, txtVar)
frames.append(f)
root.mainloop()
上面的代码不能正常工作。当我运行它时,直接执行并打印 lambdas。我明白为什么。
有没有可能实现我想要的?
【问题讨论】:
-
第一个链接只解释了为什么你不能使用一个parathesis,正如描述中所说的,我知道为什么。想知道样品的意图是否有解决方案。另一个链接链接到这个问题。
-
“我明白为什么” 如果你明白为什么,你应该知道如何解决它。实际上评论中的第一个链接对此案有答案。
-
链接帖子中的线程创建者没有和我一样的问题。我知道答案可能在对该帖子的所有回复中,而 Menno Hölscher 可能是正确的。这里的解决方案是使用“lambda 上的 lambda”。链接的帖子将解决我的第二个问题。
标签: python python-3.x tkinter