在悬停时向 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 等是什么或它们包含什么,但这应该有效。
到目前为止我有这个,工作正常:
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 等是什么或它们包含什么,但这应该有效。