Tk中多了一组位于命名空间为ttk
的组件,比如创建一个按钮可以用命令button
,也可以用命令ttk::button
。自然问题也就来了,两者之间有什么不同呢?
ttk是Themed Tk的意思。就是说Tk组件有“主题”的概念了。
控件本质的目的是为了和用户进行交互。但就像衣服一样,人们总想着有所不同,有所风格。这就要求把空间的功能和样式进行分离。
在网页设计中,是分离为用于内容的HTML和用于样式的CSS。
在Tk中,是分离出一个style
的概念用于控制widget的样式。一组style(样式)的集合组成theme(主题)。
用于设置样式和主题的Tk命令是ttk::style
。
Style(样式)用于指定特定组件的外观。
ttk::style lookup TButton -foreground ;# 查询默认样式属性 ttk::style lookup TButton -foreground "pressed" ;# 查询对应状态的样式属性 ttk::style configure TButton -foreground ;# 设置样式属性 ttk::style configure TButton -foreground blue ttk::style map TButton \ -foreground [list disabled red active green] ;# 设置动态样式(不同状态的样式)
一个widget应该使用哪一个Style按照下面的顺序决定:
-style
选项显示指定的Style-class
选项所指定的类型名称所对应的的Style
Theme(主题)是一组Style的集合,相当于CSS里面的样式表。
ttk::style theme create $theme ;# 创建新主题 ttk::style theme create $theme -parent $parent_theme ;# 创建新主题,继承指定的主题 ttk::style theme create $theme -settings $script ;# 创建主题并执行命令$script ttk::style theme settings $them $script ;# 临时切换到主题$theme,执行命令$script,再切换回来 ttk::style theme names ;# 列出主题名字 ttk::style theme use ;# 查询当前主题 ttk::style theme use "clam" ;# 设置主题
TODO