动态获取哪个按钮使用功能
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)
我有一个关于按钮和绑定的问题,但最好向您展示。
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)