如何在不破坏 GUI 的情况下在 Tkinter 中单击 canvas_image 时执行该功能?

How to execute the function when click on canvas_image in Tkinter without spoiling the GUI?

我有一个代码可以在光标悬停在图像上时将图像从 my_pic1 更改为 my_pic2 并且工作正常但是如果我想执行 on_click 函数我该怎么办当用户点击图像时 (my_pic1) ?

from tkinter import * 

def on_click():
    print('clicked')

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

def onObjectClick2(event):
    canv.itemconfig(obj1, image=my_pic1)
    canv.tag_bind(obj1, '<Enter>', onObjectClick1)        
    
root = Tk()    
canv = Canvas(root, width=300, height=300)

background = PhotoImage(file="background.gif")
canv.create_image(300,300,image=background)

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

我用过 Button,但它给图像背景设置了白色,这破坏了 GUI 的外观和感觉。

这是我添加按钮后的代码,

from tkinter import * 

def on_click():
    print('clicked')

root = Tk()    

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

background = PhotoImage(file="background.gif")
canv.create_image(300,300,image=background)

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

我对 Tkinter 非常陌生!请帮助我!!!!

左键单击事件是“<1>”,因此:

from tkinter import *

def on_click(event=None): # add the event parameter
    print('clicked')

def onObjectClick1(event=None):
    canv.itemconfig(obj1, image=my_pic2)

def onObjectClick2(event=None):
    canv.itemconfig(obj1, image=my_pic1)

root = Tk()
canv = Canvas(root, width=300, height=300)

background = PhotoImage(file="background.gif")
canv.create_image(300,300,image=background)
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.tag_bind(obj1, '<1>', on_click)
canv.pack()

root.mainloop()