Tcl 是否可以更改笔记本选项卡的宽度?

Tcl 是否可以更改笔记本选项卡的宽度?,tcl,tk,ttk,Tcl,Tk,Ttk,正如标题所说,我想知道是否可以更改笔记本小部件选项卡的宽度 我要做的是确保选项卡大小相等,即使有人调整窗口大小,也能填满整个窗口。目前看来是这样的: 但我想这样做: [我通过在选项卡名称前后添加空格来完成此操作] 第一个的相关代码是: ttk::frame $fr.note.tab1 $fr.note add $fr.note.tab1 -text "Tab1" ;# For the second, it's " Tab1 " ttk::frame $fr.note.tab

正如标题所说,我想知道是否可以更改笔记本小部件选项卡的宽度

我要做的是确保选项卡大小相等,即使有人调整窗口大小,也能填满整个窗口。目前看来是这样的:

但我想这样做:

[我通过在选项卡名称前后添加空格来完成此操作]

第一个的相关代码是:

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"
我试图查看,但似乎只有小部件本身可以更改其大小(选项卡下方的区域)

是否有一种方法可以指定选项卡的宽度或解决方法?我试过:

$fr.note add $fr.note.tab1 -text "Tab1" -width 90

但是当然,这抛出了一个错误,指出选项
-width
是一个未知的选项(并且选项卡似乎无法通过no
configure
命令进行配置)。

稍后进行了一些调查,由于选项卡行布局引擎中的一些错误,您似乎无法进行配置


似乎它应该这样工作:

# An arbitrary value!
ttk::style configure Wider.TNotebook -mintabwidth 1000
$fr.note configure -style Wider.TNotebook
这将使整个可用空间远小于所需空间,这将使事物很好地共享


但事实并非如此。第一个选项卡获取增加的空间,但从其他未扩展选项卡本应占据的空间中窃取,而不是从它们本应占据的剩余空间中窃取。我无法想象这种行为是故意的;这是一个bug。

今天,在对文件classicTheme中lib/tk8.6/ttk文件夹中的源代码进行了一些窥探之后,我发现可以使用它来调整笔记本选项卡的大小:

ttk::style configure TNotebook.Tab -width 20
例如:

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
上述情况表明:

但是,所有注释将继承相同的配置,但如果窗口太小,选项卡将均匀调整大小:

您可能会注意到,在设置选项卡宽度时,我将其除以6,这是我在配置选项卡时发现的
winfo width
-width
给出的值之间的因子差异(直接使用
$nw/$tc
会产生巨大的选项卡宽度)

另外,还可以将注释绑定到
,以便在窗口大小更改时,选项卡可以自动调整大小以适应窗口:

bind .note <Configure> {
  set nw [winfo width .note]
  set tc [llength [winfo children .note]]
  ttk::style configure TNotebook.Tab -width [expr {$nw/6/$tc}]
}
bind.note{
设置nw[winfo宽度.注释]
设置tc[llength[winfo children.note]]
ttk::style configure TNotebook.Tab-宽度[expr{$nw/6/$tc}]
}

我不完全确定这是否是一个好的做法,它对我来说很有效^ ^

很好的问题!这一点并不明显,但可能在样式或制表符放置说明中(不是Ttk中易于理解或记录良好的一部分…),它肯定不是您可以在样式上设置的其他选项(
-tabposition
-tabplacement
-tabmargins
-padding
)源代码中的注释表明,
-mintabwidth
至少应该参与其中。它就是不能正常工作。谢谢你查找它!我会尝试使用这些新工具,看看是否能找到足够令人满意的东西。