如何使用 Canvas 悬停图像? TKinter

How to hover Image using Canvas ? TKinter

我有一个代码可以在 Label 小部件上完美运行,但我很困惑如何将其转换为 Canvas?

这是我试过的代码。

from tkinter import * 

def onObjectClick1(event):
    print("1")
    my_pic1 = PhotoImage(file="start000-before.png")
    obj1 = canv.create_image(50,50,image=my_pic1, anchor=NW)

def onObjectClick2(event):
    print("2")
    my_pic2 = PhotoImage(file="start000-after.png")
    obj2 = canv.create_image(50,50,image=my_pic2, anchor=NW)
    
root = Tk()    
canv = Canvas(root, width=300, height=300)
my_pic1 = PhotoImage(file="start000-before.png")
obj1 = canv.create_image(50,50,image=my_pic1, anchor=NW)
canv.tag_bind(obj1, '<Enter>', onObjectClick1)        
canv.tag_bind(obj1, '<Leave>', onObjectClick2)        
canv.pack()

root.mainloop()

我是 Tkinter 的新手。谢谢!

我想我明白你想做什么,但有两件事你做错了。第一个与this有关。如果你在你的函数中定义了一个局部变量来保存你的图像对象,你将在离开函数时失去对它的跟踪。第二个是您在旧对象上创建新对象,然后您将永远无法再次“输入”该对象。您可以使用 Canvas.itemconfig() 来更改项目图像,但要小心,因为这样做会丢失项目绑定,因此您需要重新执行。试试这个,看看它是否符合您的预期:

from tkinter import * 

def onObjectClick1(event):
    print("1")
    canv.itemconfig(obj1, image=my_pic2)
    canv.tag_bind(obj1, '<Leave>', onObjectClick2)     

def onObjectClick2(event):
    print("2")
    canv.itemconfig(obj1, image=my_pic1)
    canv.tag_bind(obj1, '<Enter>', onObjectClick1)        
    
root = Tk()    
canv = Canvas(root, width=300, height=300)
my_pic1 = PhotoImage(file="start000-before.png")
my_pic2 = PhotoImage(file="start000-after.png")

obj1 = canv.create_image(50,50,image=my_pic1, anchor=NW)
canv.tag_bind(obj1, '<Enter>', onObjectClick1)        
canv.tag_bind(obj1, '<Leave>', onObjectClick2)        
canv.pack()

root.mainloop()