Tkitnter画布小部件事件

问题描述 投票:-1回答:2

我正在制作一个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)

不要打扰所有无关的歌曲对象

我列出了这些对象并将它们全部显示在画布中预期的输出是,一旦我将鼠标悬停在矩形上,它将变为绿色实际发生的情况是,一旦悬停在任何矩形上,只有最后创建的矩形才会着色。

python events tkinter
2个回答
0
投票

也许这可以为您提供帮助,它是一个矩形,当您将鼠标悬停在它上面时,它变成绿色;当您离开它时,它变成红色;如果单击它,则它变成蓝色。


0
投票

由于每个矩形都是guiSong的实例,因此您可以直接绑定到画布项目而不是标签。

© www.soinside.com 2019 - 2024. All rights reserved.