有没有办法在tcl中设置按钮的全局样式?

时间:2014-01-06 22:01:24

标签: tcl

所以我有这种选项的按钮类型。

button .but1 -text "Sample" -width 10 -height 2 -background $btnColor -activeforeground $actForegrd -state normal -activebackground $activbtnColor -relief flat -highlightthickness 0

有没有办法用按钮的那些选项创建一个全局变量,我知道样式配置,但为了使用样式,我需要将我的按钮更改为ttk :: button而那些不具有相同的选项作为常规按钮。

我尝试将所有选项放在字符串中并在创建按钮时传递它但它不起作用 例如:

set style "-width 10 -height 2 -background $btnColor -activeforeground $actForegrd -state normal -activebackground $activbtnColor -relief flat -highlightthickness 0"
button .but1 $style

1 个答案:

答案 0 :(得分:2)

有两种基本的可能性。

1。使用扩展

您尝试的是几乎。试试这个:

set style "-width 10 -height 2 -background $btnColor -activeforeground $actForegrd -state normal -activebackground $activbtnColor -relief flat -highlightthickness 0"
button .but1 {*}$style

{*}(在8.5中输入Tcl)使得扩展后面的内容为多个参数。

2。使用“数据库”选项

相反,您可以使用option command将所有这些值放入选项数据库

option add *.Button.width 10
option add *.Button.height 2
option add *.Button.background $btnColor
option add *.Button.activeForeground $actForegrd
option add *.Button.state normal
option add *.Button.activeBackground $activbtnColor
option add *.Button.relief flat
option add *.Button.highlightThickness 10
## You can also pull the above from a separate file with:
# option readfile ~/thefile.opts

button .but1

正确使用选项数据库很棘手,但是它允许您一次设置许多小部件的默认值(或者只是一个,或者只是特定窗口的子窗口或窗口类别的窗口小部件,或者...)你将真正从代码中分离出风格。

我通常不会通过此机制设置state,因为这更像是一个语义选项;如果一个按钮将被禁用或者没有真正 对代码很重要(正如在发生这种情况时运行的回调是另一个我不通过选项设置的回调)。


应该注意的是,Ttk样式/主题机制在很大程度上取代了这一点,因为它允许更加实质性的修改和更清晰的运行时间切换。但是有很多效果要做到这一点要难得多;我们仍然保留经典button等等。