如何使用 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()
我有一个代码可以在 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()