将鼠标悬停在选项卡上时显示工具提示

时间:2018-09-16 08:46:15

标签: tcl tk

我正在使用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 :(得分:1)

我已经为Notebook小部件写了一个小扩展名,正是您想要的功能。您可以从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"

答案 1 :(得分:0)

并不是我一直在寻找的解决方案,但这已经足够了。为帮助文本创建标签,并将选项卡的条目绑定到标签

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 ""}

答案 2 :(得分:0)

真的可以。您必须在命令 “插入” 中添加选项 -helptext

根据Bwidget doc

  

[...]

     

路径名插入索引页?选项值...?

     

在页面列表的位置索引处插入一个由页面标识的新页面。索引必须是数字或结尾。新页面的路径名   返回。如果由选项指定,则动态帮助为   当指针悬停在属于该选项卡的选项卡上时显示   页面。

-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. 
     

[...]