【问题标题】:How to hover Image using Canvas ? TKinter如何使用 Canvas 悬停图像? TKinter
【发布时间】:2021-03-08 07:39:23
【问题描述】:

我的代码在 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 的新手。谢谢!

【问题讨论】:

  • “悬停图像”是什么意思?

标签: python python-3.x user-interface tkinter tkinter-canvas


【解决方案1】:

我想我明白你想做什么,但有两件事你做错了。第一个与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()

【讨论】:

  • 非常感谢!它完全按照我想要的方式工作。我想再问一件事,是否可以提供滑入和滑出过渡到画布内的图像?
  • 是的,但您必须手动编程。就像你可以改变一张图片一样,你可以移动它
  • 但是我想太多了,如果你想做像现代 html 网页这样的高级设计,tkinter 并不是最好的工具。当然可以,但要付出什么代价?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 2019-08-29
  • 2014-02-18
  • 2012-09-17
相关资源
最近更新 更多