如何确定Python TKinter中哪个按钮被按下按钮网格?

时间:2015-02-27 09:34:45

标签: 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是打开一个新窗口并需要根据按钮编号执行其他功能的功能(如“Ch011”等)

1 个答案:

答案 0 :(得分:2)

最简单的方法是,在构建按钮时,使用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)?Python tkinter creating buttons ... arguments