如何确定按下了哪个按钮?

时间:2021-02-27 16:07:01

标签: python tkinter

我创建了 5 个按钮。当用户单击按钮时,将打开新窗口。我希望打开的窗口有不同的标题。例如用户点击button1,打开的窗口名称为"Button_1"。这是我代码的一部分。

button1= tk.Button(window,image=photo1,command=Calculations)
button2= tk.Button(window,image=photo2,command=Calculations)
button3= tk.Button(window,image=photo3,command=Calculations)
button4= tk.Button(window,image=photo4,command=Calculations)
button5= tk.Button(window,image=photo5,command=Calculations)

def Calculations():
    window_2 = tk.Toplevel()
    window_2.geometry("1000x1000")
    window_2.title("Button_1")

我想如果我知道按下了哪个按钮,我想我可以分配一个变量并使用 window_2.title() 方法编写 format()。有没有办法找到按下的按钮并将其分配给变量或其他想法?

3 个答案:

答案 0 :(得分:4)

您使用 functools.partial(<command>, *arguments) 传递按钮及其名称/索引。

from functools import partial

def Calculations(button, name):        
    window_2 = tk.Toplevel()
    window_2.geometry("1000x1000")
    window_2.title(name)

# Create the button without a command or an empty command
button1= tk.Button(window, image=photo1)
# Configure the command later so that we can also pass in `button1` to the function
button1.config(command=partial(Calculations, button1, "button1"))


button2 = tk.Button(window, image=photo2)
button2.config(command=partial(Calculations, button2, "button2"))

...

答案 1 :(得分:2)

您可以对按钮的 command 参数使用 lambda 函数。

button1= tk.Button(window,image=photo1,command=lambda: Calculations("1"))    
button2= tk.Button(window,image=photo2,command=lambda: Calculations("2"))    
button3= tk.Button(window,image=photo3,command=lambda: Calculations("3"))    
button4= tk.Button(window,image=photo4,command=lambda: Calculations("4"))    
button5= tk.Button(window,image=photo5,command=lambda: Calculations("5"))

def Calculations(num):        
   window = tk.Toplevel()
   window.geometry("1000x1000")
   window.title("Button_" + num)

更有效的解决方案是使用 for 循环:

for i in range(5):
    i += 1
    globals()["button" + str(i)] = tk.Button(window, image=globals()["photo" + str(i)], command=lambda i=i: Calculations(str(i)))    

def Calculations(num):        
   window = tk.Toplevel()
   window.geometry("1000x1000")
   window.title("Button_" + num)

答案 2 :(得分:1)

button1= tk.Button(window,image=photo1,command=lambda: Calculations("button one"))    
button2= tk.Button(window,image=photo2,command=lambda: Calculations("button two"))    
button3= tk.Button(window,image=photo3,command=lambda: Calculations("button three"))    
button4= tk.Button(window,image=photo4,command=lambda: Calculations("button four"))    
button5= tk.Button(window,image=photo5,command=lambda: Calculations("button 5"))

所以当按下按钮时,它会给出一个 str 变量,表示按下了哪个按钮。示例:“按钮一”

def Calculations(button):        
    window = tk.Toplevel()
    window.geometry("1000x1000")
    window.title(str(button))

然后窗口的标题将是按下了哪个按钮。

您还可以制作一组单选按钮/复选按钮并将它们分配给 tk.IntVar() 并为每个按钮设置一个唯一值并制作一个“完成”按钮。 (它做同样的事情,期望它是复选按钮)

   var = tk.IntVar()

    C1 = tk.Checkbutton(frame, onvalue=1, variable=self.var)
    C2 = tk.Checkbutton(frame, onvalue=2, variable=self.var)
    C3 = tk.Checkbutton(frame, onvalue=3, variable=self.var)
    C4 = tk.Checkbutton(frame, onvalue=4, variable=self.var)

done = tk.button(frame, command=calculations)

def Calculations(num):        
    window = tk.Toplevel()
    window.geometry("1000x1000")
    window.title("Button_" + var)