如何确定 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.partiallambda.

将名称绑定到命令

使用functools.partial:

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