如何像在 Button 中一样在 canvas_image 中使用“command”? Tkinter

How to use “command” in canvas_image just like in Button ? Tkinter

我有一个运行良好的代码,但我希望我的图像具有可点击的功能,以便它可以重定向到框架。

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()

请帮帮我,我是 Tkinter 的新手。

目前您正在绑定 Enter 和 Leave 事件。要绑定到点击事件,您需要使用 Button-1

canv.tag_bind(obj1, '<Button-1>', onMouseButton1Click)

canvas 和 canvas 小部件不像其他 tkinter 小部件那样支持 command 属性。

您可以在包含普通 tkinter 小部件的 tkinter canvas 中创建一个 window。在下面的示例中,我创建了一个包含按钮的 window。然后可以正常使用command

from tkinter import * 

def PressMeCmd():
    print("You pressed me")
    
root = Tk()    
canv = Canvas(root, width=300, height=300)

button = Button(canv,text="Press Me",command=PressMeCmd)

window = canv.create_window(0,0,window=button)

canv.pack()

root.mainloop()

您可以使用 create_window()Button 放入 Canvas:

from tkinter import * 

def on_click():
    print('button clicked')

root = Tk()    

canv = Canvas(root, width=300, height=300)
canv.pack()

my_pic1 = PhotoImage(file="start000-before.png")
my_pic2 = PhotoImage(file="start000-after.png")

btn = Button(canv, image=my_pic1, command=on_click)
btn.bind('<Enter>', lambda e: btn.config(image=my_pic2))        
btn.bind('<Leave>', lambda e: btn.config(image=my_pic1))        

canv.create_window(50, 50, window=btn, anchor=NW)

root.mainloop()