Jer*_*rry 5 tk-toolkit tcl ttk
正如标题所说,我想知道是否可以更改笔记本小部件选项卡的宽度?
我要做的是确保选项卡大小相等,并填充窗口的整个宽度,即使有人调整大小.目前,它看起来像这样:

但是想要这样:

[我通过在标签名称之前和之后添加空格来做到这一点]
第一个相关的代码是:
ttk::frame $fr.note.tab1
$fr.note add $fr.note.tab1 -text "Tab1" ;# For the second, it's " Tab1 "
ttk::frame $fr.note.tab2
$fr.note add $fr.note.tab2 -text "Tab2"
ttk::frame $fr.note.tab3
$fr.note add $fr.note.tab3 -text "Tab3"
Run Code Online (Sandbox Code Playgroud)
我试着查看手册,但似乎只有小部件本身可以改变其大小(选项卡下面的区域).
是否有可能指定选项卡的宽度或解决方法?我试过了:
$fr.note add $fr.note.tab1 -text "Tab1" -width 90
Run Code Online (Sandbox Code Playgroud)
但是,当然,这引发了一个错误,说该选项-width是一个未知的选项(并且选项卡似乎不可配置,没有configure命令).
今天,在对文件夹 lib/tk8.6/ttk 中的 classicTheme 文件中的源进行一番窥探之后,我发现可以使用它来调整笔记本选项卡的大小:
ttk::style configure TNotebook.Tab -width 20
Run Code Online (Sandbox Code Playgroud)
例子:
package require Tk ;# 8.6.4
ttk::notebook .note
set note .note
ttk::frame $note.tab1
$note add $note.tab1 -text "Tab 1"
ttk::frame $note.tab2
$note add $note.tab2 -text "Tab 2"
ttk::frame .note.tab3
$note add $note.tab3 -text "Tab 3"
pack $note -fill both -expand 1
set nw [winfo width .note]
set tc [llength [winfo children .note]]
ttk::style configure TNotebook.Tab -width [expr {$nw/6/$tc}]
ttk::style configure TNotebook.Tab -anchor center ;# To center tab label
Run Code Online (Sandbox Code Playgroud)
上式给出:

然而,所有笔记都将继承相同的配置,但如果窗口太小,选项卡将均匀调整大小:

您可能会注意到,在设置选项卡宽度时我除以 6,这是我在配置选项卡时发现的winfo width和给出的值之间的因子差异(直接使用否则会产生巨大的选项卡宽度)。-width$nw/$tc
作为额外的一项,我们还可以将注释绑定到,<Configure>以便在窗口大小发生变化时允许选项卡自动调整大小以适应窗口:
bind .note <Configure> {
set nw [winfo width .note]
set tc [llength [winfo children .note]]
ttk::style configure TNotebook.Tab -width [expr {$nw/6/$tc}]
}
Run Code Online (Sandbox Code Playgroud)
我不完全确定这是否可以被认为是好的做法,它对我有用^^