如何制作文本蒙版底层小部件?

时间:2019-05-03 09:08:30

标签: tcl tk

做一些Tk画布图形,我会得到以下行为:

enter image description here

上方的'|'由于下方有交叉线而看不到。我想屏蔽文本下方的区域以确保它始终可见,并且找不到在Tk中执行此操作的简单方法。

问:在画布文本小部件下方遮罩图形有什么选择?

1 个答案:

答案 0 :(得分:0)

实现了一种可能的解决方案。

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

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]

我对此不满意的是使用标签通过文本窗口小部件名称查找矩形。再次可能是因为我对标签缺乏经验。