在悬停时向 canvas 形状添加轮廓?

Add outline to canvas shape on hover?

到目前为止我有这个,工作正常:

def OnHover(event):                  
    canvas.itemconfig(c1, outline="#3385ff", width = hw)
def UnHover(event):                  
    canvas.itemconfig(c1, outline="")
canvas.tag_bind(shape, '<Enter>', OnHover)
canvas.tag_bind(shape, '<Leave>', UnHover)

我想知道是否可以使用少量代码来赋予多种形状这种效果。 我目前有这个,它相当混乱,可以整理和缩短,但我有点卡住了。

def OnHover1(event):                  
    canvas.itemconfig(c1, outline="#3385ff", width = hw)
def UnHover1(event):                  
    canvas.itemconfig(c1, outline="")
for i in tbh1:
    canvas.tag_bind(i, '<Enter>', OnHover1)
    canvas.tag_bind(i, '<Leave>', UnHover1)
    
def OnHover2(event):                  
    canvas.itemconfig(c4, outline="#3385ff", width = hw)
def UnHover2(event):                  
    canvas.itemconfig(c4, outline="")
for i in tbh2:
    canvas.tag_bind(i, '<Enter>', OnHover2)
    canvas.tag_bind(i, '<Leave>', UnHover2) 

def OnHover3(event):                  
    canvas.itemconfig(c7, outline="#3385ff", width = hw)
def UnHover3(event):                  
    canvas.itemconfig(c7, outline="")
for i in tbh3:
    canvas.tag_bind(i, '<Enter>', OnHover3)
    canvas.tag_bind(i, '<Leave>', UnHover3)   

对不起,如果我措辞不当。

我不确定我是否完全理解你的问题,但这是我想出的:

def OnHover(item, hw):
    canvas.itemconfig(item, outline="#3385ff", width = hw)
def UnHover(item):
    canvas.itemconfig(item, outline="")

def bindList(l, item, hw):
    for i in l:
        canvas.tag_bind(i, '<Enter>', lambda event: OnHover(item=item, hw=hw))
        canvas.tag_bind(i, '<Leave>', lambda event: UnHover(item=item))
bindList(tbh1, c1, hw)
bindList(tbh2, c4, hw)
bindList(tbh3, c7, hw)

现在有一个 bindList 函数,它遍历列表和 tag_binds 每个项目。 OnHover 和 UnHover 函数现在采用您要更改其轮廓的项目。我无法对此进行测试,因为我不知道 c1、c4、tbh1 等是什么或它们包含什么,但这应该有效。