Как сделать текстовую маску лежащей в основе виджетов? - PullRequest
0 голосов
/ 03 мая 2019

Делая некоторую графику холста Tk, я получаю следующее поведение:

enter image description here

Верхний '|' не виден из-за линии под ней. Я хотел бы замаскировать область под текстом, чтобы она всегда была видна, и не могу найти простой способ сделать это в Tk.

В: Какие есть варианты маскировки графики под текстовым виджетом canvas ?

1 Ответ

0 голосов
/ 03 мая 2019

Реализовано одно возможное решение для него.

После создания текстового виджета я создаю прямоугольник с заливкой фона. Прямоугольник также добавляется к тегу, имя которого происходит от имени текстового виджета :

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]

Что мне не нравится в этом, так это использование тегов для поиска прямоугольника по имени текстового виджета. Тогда снова может быть из-за моей неопытности с тегами.

...