我正在嘗試創建一個用于與微控制器通信的 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。我明白為什么。
有沒有可能實作我想要的?
uj5u.com熱心網友回復:
你必須這樣做:
self.button = tk.Button(self.frame, text=self.txt, command=lambda: self.fn(self.txtVar))
我添加了lambdaelseself.fn立即被呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/415633.html
標籤:
