使用bind tkinter检查列表中的哪个按钮

问题描述 投票:0回答:2

我有一个按钮列表,当我运行一个函数时,我需要检查该列表中的哪个按钮被按下。

import tkinter

root = tkinter.Tk()

def Function(event):
    print('The pressed button is:')

listOfButtons = []
Button = tkinter.Button(root, text="Button 1")
listOfButtons.append(Button)
Button.pack()
Button.bind("<Button-1>", Function)

Button = tkinter.Button(root, text="Button 2")
Button.pack()
listOfButtons.append(Button)
Button.bind("<Button-1>", Function)

root.mainloop()
python button tkinter bind
2个回答
3
投票

迭代列表中的所有按钮,然后检查if button is event.widget

def Function(event):
    for button in listOfButtons:
        if button is event.widget:
            print(button['text'])
            return

正如@tobias_k所提到的那样 - 它过于复杂。你已经有button作为event.widget。所以解决方案就像print(event.widget['text'])一样简单。但是,如果Function不仅可以通过按钮点击来调用,或者有几个带按钮/列表的列表 - 那么必须检查!

另一方面,按钮不仅可以通过鼠标左键单击按下,因此command选项更好!

import tkinter

root = tkinter.Tk()

def Function(button):
    print(button['text'])


...
Button = tkinter.Button(root, text="Button 1")
Button.configure(command=lambda button=Button: Function(button))
...


Button = tkinter.Button(root, text="Button 2")
Button.configure(command=lambda button=Button: Function(button))
...

root.mainloop()

1
投票

你可以使用命令

import tkinter

root = tkinter.Tk()

def Function(event):
    if event == 1:
        print('The pressed button is: 1')
    if event == 2:
        print('The pressed button is: 2')

listOfButtons = []
Button = tkinter.Button(root, text="Button 1", command= lambda: Function(1))
listOfButtons.append(Button)
Button.pack()

Button = tkinter.Button(root, text="Button 2",command= lambda: Function(2))
Button.pack()
listOfButtons.append(Button)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.