首先,一些术语。Ttk是Tk的主题层。它由一组主题组成,这些主题由应用于小部件的样式组成。这些样式由一个或多个元素引擎提供的元素组成。
主题层的目的是使Tk更好地适应用户桌面的本地外观和感觉,而不是允许程序员创建各种可怕的自定义小部件。这已经由Tk实现了。
因此,在Windows上,默认主题是可以使用Visual Styles API的主题。这是在Windows XP及以上版本上绘制按钮边缘、背景等的东西。由于Tk支持旧版Windows,因此我们还有一个支持GDI绘图元素(winnative)的主题。对于运行在MacOS上的Tk,有一个使用本地主题的元素引擎,而在X11上,我们必须使用Tk绘图来发出看起来不错的东西。尝试让Ttk与GTK+和Qt主题API连接并没有真正成功。
因此,您可以使用的主题取决于您所在的平台。不同的主题提供不同数量的可配置性。使用外部API(vsapi、winnative或aqua)提供的元素实际上无法让您进行太多自定义。但是,主题还可以从默认(Tk绘制)元素引擎导入元素或使用
images作为视觉元素。图像元素引擎允许您完全更改整个样式集的外观(因此更改所有小部件的外观),如果您真的想要的话。但它相当缓慢。
总的来说,重点是减少开发人员的工作量,使应用程序看起来本地化,而不是允许最终的可定制性。
要查找可用的主题:
>>> ttk.Style().theme_names()
('clam', 'alt', 'default', 'classic')
这是在Linux上。在Windows 7上也有winnative、xpnative和vista主题。初始主题根据平台在运行时选择,除非应用程序选择备选主题。
主题中定义的样式都与小部件相关联。没有提供枚举所有样式的方法。您可以可能迭代所有ttk小部件并查看它们的winfo_class()
方法结果,因为这显示了该小部件正在使用的主题样式。
./tcl/tk8.x/ttk/[theme].tcl
目录中。 - Supra621