Estoy usando DynamicHelp para mostrar información sobre herramientas. El problema es que solo muestra ayuda cuando el cursor está en el cuerpo de la pestaña: no cuando está en la pestaña misma. Lo que me gustaría que suceda es que el texto de ayuda se muestre cuando el usuario se desplace sobre las pestañas en lugar de tener que seleccionar la pestaña, luego mueva el cursor al cuerpo antes de que se muestre la ayuda.

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"

Encontré este fragmento de código en la implementación del portátil; no sé si ayuda. No puedo entender cómo se obtiene el manejo de la pestaña de esto.

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]
        }
    }
}
2
cup 16 sep. 2018 a las 11:46

3 respuestas

La mejor respuesta

Realmente puedes. Debe agregar la opción -helptext en el comando "insert" .

De acuerdo con Bwidget doc:

[...]

ruta Nombre insertar página de índice? valor de opción ...?

Inserte una nueva página identificada por página en el índice de posición en la lista de páginas. El índice debe ser numérico o final. Se devuelve el nombre de ruta de la nueva página. La ayuda dinámica, si está especificada por las opciones, se muestra cuando el puntero se desplaza sobre la pestaña que pertenece a la página.

-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
L. Alejandro M. 21 sep. 2018 a las 04:24

No era la solución que estaba buscando, pero es lo suficientemente buena. Cree una etiqueta para el texto de ayuda y vincule la entrada de la pestaña a la etiqueta

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 ""}
0
cup 19 sep. 2018 a las 19:36

He escrito una pequeña extensión para el widget de Notebook que hace exactamente lo que quieres. Puede descargarlo desde notebook-tip.tcl. Úselo de la siguiente manera:

Después de que el paquete lo requiera, obtenga este archivo. Crea tus pestañas y agrega los globos. Múltiples líneas son posibles.

Ejemplo:

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

Puede cambiar el texto del globo dinámicamente con itemconfigure:

$path itemconfigure $page -balloon text

Por ejemplo:

.n itemconfigure tb1 -balloon "another text"
1
HanT 21 sep. 2018 a las 11:40