如何确定 Python TKinter 中按钮网格中的哪个按钮被按下?
How to determine which button is pressed out of Button grid in Python TKinter?
我正在用 Python TKinter 编写一个 GUI,其中我有一个由大约 24 个按钮组成的网格,这些按钮是我使用循环创建的(不是单独的)。有什么方法可以获取我按下的按钮的文本。
由于它在循环中,即使使用 lambda 的回调函数也无济于事。我不想编写单独的代码,按下每个不同的按钮时会发生什么。我只需要知道相应按钮的文本,这样我就可以启动另一个仅适用于该文本的通用函数。
ps:我可以完成相同的任务,但使用 List 和 curselection() 并且不希望这样。
self.num = 11
for r in range(0,5):
for c in range(0,3):
R = r; C = c
resNum = "Ch0"+str(self.num);
self.button1_rex = tk.Button(self.frame, text = resNum,font=("Helvetica", 14), justify = CENTER,width = 20, command = self.new_window)
self.button1_rex.grid(row=R, column=C, sticky=W)
self.num = self.num+1
self.new_window 是打开新 window 的函数,需要根据按钮编号执行其他功能(如 "Ch011" 等)
最简单的方法就是在构建按钮时,使用 functools.partial
或 lambda
.
将名称绑定到命令
self.button1_rex = tk.Button(..., command=functools.partial(self.new_window, resNum))
使用 lambda:
self.button1_rex = tk.Button(..., command=lambda r=resNum: self.new_window(r))
有关 lambda 的更多信息,请参阅 What is a lambda (function)? and Python tkinter creating buttons ... arguments。
我正在用 Python TKinter 编写一个 GUI,其中我有一个由大约 24 个按钮组成的网格,这些按钮是我使用循环创建的(不是单独的)。有什么方法可以获取我按下的按钮的文本。
由于它在循环中,即使使用 lambda 的回调函数也无济于事。我不想编写单独的代码,按下每个不同的按钮时会发生什么。我只需要知道相应按钮的文本,这样我就可以启动另一个仅适用于该文本的通用函数。
ps:我可以完成相同的任务,但使用 List 和 curselection() 并且不希望这样。
self.num = 11
for r in range(0,5):
for c in range(0,3):
R = r; C = c
resNum = "Ch0"+str(self.num);
self.button1_rex = tk.Button(self.frame, text = resNum,font=("Helvetica", 14), justify = CENTER,width = 20, command = self.new_window)
self.button1_rex.grid(row=R, column=C, sticky=W)
self.num = self.num+1
self.new_window 是打开新 window 的函数,需要根据按钮编号执行其他功能(如 "Ch011" 等)
最简单的方法就是在构建按钮时,使用 functools.partial
或 lambda
.
self.button1_rex = tk.Button(..., command=functools.partial(self.new_window, resNum))
使用 lambda:
self.button1_rex = tk.Button(..., command=lambda r=resNum: self.new_window(r))
有关 lambda 的更多信息,请参阅 What is a lambda (function)? and Python tkinter creating buttons ... arguments。