我正在使用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]
}
}
}
答案 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.
[...]