Отображение всплывающей подсказки при наведении на вкладку - PullRequest
0 голосов
/ 16 сентября 2018

Я использую DynamicHelp для отображения подсказок. Проблема заключается в том, что справка отображается только тогда, когда курсор находится на теле вкладки, а не на самой вкладке. Я хотел бы, чтобы текст справки отображался, когда пользователь наводит курсор на вкладки вместо того, чтобы выбирать вкладку, а затем перемещать курсор к телу перед отображением справки.

package require BWidget

 ## create a notebook with 2 text panes
 NoteBook .n
 .n insert 0 tb1 -text "Tab 1"
 .n insert 1 tb2 -text "Tab 2"
 foreach panel {tb1 tb2} {
    set pane [.n getframe $panel]
    text $pane.t
    pack $pane.t -fill both -expand 1
 }
 pack .n
 .n raise tb1

#                    ,-- How do I get the tab?
DynamicHelp::add [.n getframe tb1] -text "The essence of silly\nsally silica"
DynamicHelp::add [.n getframe tb2] -text "acetyl sali cylic\nacid is aspirin"

Я нашел этот фрагмент кода в реализации ноутбука - не знаю, поможет ли это. Я не могу понять, как он получает управление вкладкой от этого.

proc NoteBook::_highlight { type path page } {
    variable $path
    upvar 0  $path data

    if { [string equal [Widget::cget $path.f$page -state] "disabled"] } {
        return
    }

    switch -- $type {
        on {
            $path.c itemconfigure "$page:poly" \
            -fill [_getoption $path $page -activebackground]
            $path.c itemconfigure "$page:text" \
            -fill [_getoption $path $page -activeforeground]
        }
        off {
            $path.c itemconfigure "$page:poly" \
            -fill [_getoption $path $page -background]
            $path.c itemconfigure "$page:text" \
            -fill [_getoption $path $page -foreground]
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Действительно, вы можете.Вы должны добавить параметр -helptext в команду "insert" .

Согласно Bwidget doc :

[...]

pathName вставить страницу индекса? Значение параметра ...?

Вставить новую страницу, идентифицированную страницей по индексу позиции в списке страниц.Индекс должен быть числовым или конечным.Путь к новой странице возвращается.Динамическая справка, если она указана в параметрах, отображается, когда указатель мыши находится над вкладкой, которая принадлежит странице.

-helpcmd
    Has no effect. See also DynamicHelp. 

-helptext
    Text for dynamic help. If empty, no help is available for this page. See also DynamicHelp. 

-helptype
    Type of dynamic help. Use balloon (the default for a NoteBook page) or variable. See also DynamicHelp. 

-helpvar
    Variable to use when -helptype option is variable. See also DynamicHelp. 

[...]

0 голосов
/ 21 сентября 2018

Я написал небольшое расширение для виджета Блокнот, что делает именно то, что вы хотите. Вы можете скачать его с notebook-tip.tcl . Используйте его следующим образом:

После того, как пакет требуется, поставьте этот файл. Создайте свои вкладки и добавьте воздушные шары. Возможны несколько строк.

Пример:

package require BWidget
source notebook-tip.tcl

NoteBook .n
.n insert 0 tb1 -text "Tab 1"
.n balloon tb1 "balloon text for Tab 1"
.n insert 1 tb2 -text "Tab 2"
.n balloon tb2 "balloon text for Tab 2"
foreach panel {tb1 tb2} {
  # add contents
  set pane [.n getframe $panel]
  text $pane.t
  pack $pane.t -fill both -expand 1
}
.n raise tb1
grid .n -sticky ew

Вы можете динамически изменять текст всплывающей подсказки с помощью itemconfigure:

$path itemconfigure $page -balloon text

Например:

.n itemconfigure tb1 -balloon "another text"
0 голосов
/ 19 сентября 2018

Не совсем то решение, которое я искал, но оно достаточно хорошее. Создайте метку для текста справки и привяжите запись вкладки к метке

package require BWidget

# Creat a bar for help
grid [label .l1 -textvariable tabhelp -justify left] -sticky w -row 0
## create a notebook with 2 text panes
NoteBook .n
.n insert 0 tb1 -text "Tab 1"
.n insert 1 tb2 -text "Tab 2"
foreach panel {tb1 tb2} {
   set pane [.n getframe $panel]
   text $pane.t
   pack $pane.t -fill both -expand 1
}
.n raise tb1
grid .n -sticky ew -row 1

DynamicHelp::add [.n getframe tb1] -text "The essence of silly\nsally silica"
DynamicHelp::add [.n getframe tb2] -text "acetyl sali cylic\nacid is aspirin"

# Add help on entry into the tabs
.n.c bind p:tb1 <Enter> {set tabhelp "Woody Woodpecker"}
.n.c bind p:tb1 <Leave> {set tabhelp ""}

.n.c bind p:tb2 <Enter> {set tabhelp "Aspirins are great"}
.n.c bind p:tb2 <Leave> {set tabhelp ""}
...