动态获取哪个按钮使用功能

Get dynamically which button uses function

我有一个关于按钮和绑定的问题,但最好向您展示。

from tkinter import Tk,Button
root = Tk()
startbutton = Button(root,text="start button")
pingbutton = Button(root,text="ping button")

startbutton.pack()
pingbutton.pack()

def startenterbind(e):
    startbutton.config(relief='sunken')
def startleavebind(e):
    startbutton.config(relief='raised')
def pingenterbind(e):
    pingbutton.config(relief='sunken')
def pingleavebind(e):
    pingbutton.config(relief='raised')
startbutton.bind("<Enter>", startenterbind)
startbutton.bind("<Leave>", startleavebind)
pingbutton.bind("<Enter>", pingenterbind)
pingbutton.bind("<Leave>", pingleavebind)

root.mainloop()
        

这是我的代码,现在我想知道,有没有更好的方法来做到这一点? 也许可以动态获取悬停的按钮,然后更改悬停的按钮?

这样我就可以对多个按钮使用一个功能,而只影响 <Enter>' 或 <Leave>' 的那个?

您可以通过使用传递给它们的 event 对象来重用事件处理函数,该对象具有告诉您触发它的小部件的属性。

from tkinter import Tk,Button
root = Tk()
startbutton = Button(root,text="start button")
pingbutton = Button(root,text="ping button")

startbutton.pack()
pingbutton.pack()

def startenterbind(event):
    event.widget.config(relief='sunken')

def startleavebind(event):
    event.widget.config(relief='raised')

startbutton.bind("<Enter>", startenterbind)
startbutton.bind("<Leave>", startleavebind)
pingbutton.bind("<Enter>", startenterbind)
pingbutton.bind("<Leave>", startleavebind)

root.mainloop()

您可以更进一步,编写一个函数,只要调用按钮,它就可以简单地切换按钮的状态。一种可以实现的方法是使新的浮雕类型取决于它当前是什么,这可以通过调用通用小部件 cget() 方法来确定:

def enterleavebind(event):
    new_relief = 'sunken' if event.widget.cget('relief') == 'raised' else 'raised'
    event.widget.config(relief=new_relief)

startbutton.bind("<Enter>", enterleavebind)
startbutton.bind("<Leave>", enterleavebind)
pingbutton.bind("<Enter>", enterleavebind)
pingbutton.bind("<Leave>", enterleavebind)