如何制作文本掩码底层小部件?

How to make text mask underlying widgets?

做一些 Tk canvas 图形我得到这个行为:

上'|'由于下面的线穿过它,所以不可见。我想屏蔽文本下方的区域以确保它始终可见,但在 Tk 中找不到执行此操作的简单方法。

问:在 canvas 文本小部件下方有哪些屏蔽图形的选项?

为其实施了一种可能的解决方案。

创建文本小部件后,我创建了一个带有背景填充的矩形。该矩形也被添加到 名称源自文本小部件名称的标签:

set anno [$canvas create text $acoords -text $text -justify $ajust]
set bgfill [$canvas itemcget background -fill]
set anno_bg [$canvas create rectangle {0 0 0 0} -tags ${anno}.bg -fill $bgfill -width 0]
$canvas raise $anno_bg tmplt_annotation; # tmplt_annotation is a layer of sorts
$canvas raise $anno $anno_bg

然后在更新文本小部件的位置时,我使用它的标记句柄将矩形坐标设置为文本边界框,再加上一些额外的边框:

  set box [$canvas bbox $awidget]
  $canvas coords ${awidget}.bg [- [lindex $box 0] 1] [- [lindex $box 1] 2] [+ [lindex $box 2] 1] [+ [lindex $box 3] 5]

我不喜欢的是使用标签通过文本小部件名称查找矩形。再有可能是因为我对标签的经验不足。