当您将鼠标悬停在按钮图像上时,更改按钮图像tkinter



将鼠标悬停在按钮上时,如何更改图像?我需要当你悬停在按钮1或2上时,图片会发生变化:

Photo1 = (file='ImageProgrammingButton') 
Photo2 = (file='ImageDesignButton')  
But1 = (root, image=Photo1) 
But2 = (root, image=Photo2)

悬停

Photo1 = (file='ImageActiveProgrammingButton') 
Photo2 = (file='ImageActiveDesignButton')

Tkinter有'enter'和'leaf'事件,您必须将它们绑定到某个函数,并且可以使用config方法更改图像。

这里有一个演示:


from tkinter import *
from PIL import Image, ImageTk
def onEnter(event):
global img
img = ImageTk.PhotoImage(Image.open(r'img2'))
btn.config(image=img)
def onLeave(event):
global img
img = ImageTk.PhotoImage(Image.open(r'img1'))
btn.config(image=img)

root = Tk()
img = ImageTk.PhotoImage(Image.open(r'img1')) 
btn = Button(root, image=img)
btn.pack()
btn.bind('<Enter>',  onEnter)
btn.bind('<Leave>',  onLeave)
root.mainloop()

如果你想让很多按钮都有这种效果。我建议您创建自己的按钮来继承Button类。

下面是一个例子。

同意@furas的建议。这是更新后的类

class Btn(Button):
def __init__(self, root, img1, img2, *args, **kwargs):       
super().__init__(root, *args, **kwargs)
self.img = ImageTk.PhotoImage(Image.open(img1))
self.img2 = ImageTk.PhotoImage(Image.open(img2))
self['image'] = self.img

self.bind('<Enter>', self.enter)
self.bind('<Leave>', self.leave)

def enter(self, event):
self.config(image=self.img2)
def leave(self, event):
self.config(image=self.img)

如何使用:只需在img1和img2参数中指定您的图像路径

这里有一个例子:

img = r'path1' 
img2 = r'path2'
btn = Btn(root, img1=img, img2=img2)
btn.pack()

相关内容

  • 没有找到相关文章

最新更新