我正在制作一个tkinter gui,我希望它像这样工作:我有一个框架,框架内有一个画布,而画布内有多个矩形
我想让我将鼠标悬停在矩形上,然后颜色会从白色变为绿色简单吧?
所以帮助我找出问题所在
这里是课程:
class guiSong:
def __init__(self, master: tkinter.Canvas, songobject: SongFile, x, y, rect=None):
self.master = master
self.songobject = songobject
self.x = x
self.y = y
self.rect = rect
def on_enter(self, event):
self.master.itemconfig(self.rect, fill='green')
print("Should change to green rect ", str(self.rect))
def on_leave(self, enter):
self.master.itemconfig(self.rect, fill='white')
def display(self):
self.rect = self.master.create_rectangle(self.x, self.y, self.x + 1150, self.y + 150, fill='white', tags = ['playbutton',self.songobject])
print("Self Rect is "+str(self.rect)+"!!!!!!!!!!!!!!!!!!!!!!!")
self.master.tag_bind('playbutton',"<Enter>", self.on_enter)
self.master.tag_bind('playbutton',"<Leave>", self.on_leave)
self.albumimg = Image.open(BytesIO(self.songobject.albumimage))
self.albumimg = ImageOps.expand(self.albumimg,border=5)
self.albumimg = self.albumimg.resize((120, 120), Image.ANTIALIAS)
self.img = ImageTk.PhotoImage(self.albumimg)
make_image(self.img, self.x + 25, self.y + 15, self.master)
print(f"Creating image {str(self.img)} at x",self.x+25, " y ",self.y+15 )
return self.img
#self.master.create_image(self.x + 25, self.y + 15, anchor = tkinter.W,image=img)
不要打扰所有无关的歌曲对象
我列出了这些对象并将它们全部显示在画布中预期的输出是,一旦我将鼠标悬停在矩形上,它将变为绿色实际发生的情况是,一旦悬停在任何矩形上,只有最后创建的矩形才会着色。
也许这可以为您提供帮助,它是一个矩形,当您将鼠标悬停在它上面时,它变成绿色;当您离开它时,它变成红色;如果单击它,则它变成蓝色。
由于每个矩形都是guiSong
的实例,因此您可以直接绑定到画布项目而不是标签。