==============================================================================
本文主要介绍 tkinter 子模块的特性,以及和原生 tkinter 控件之间的区别。
tkinter.ttk 模块提供了对 tk 风格控件集合的访问途径,在 tkinter 8.5 中引入。
引入 tkinter.ttk 的基本思想是尽可能将实现控件行为的代码与实现其外观的代码分开。
如果用一句话解释引入 ttk 的目的,那就是:
使用 ttk 控件可以改善应用程序的外观和感觉。
ttk 模块是 tkinter 的新特性,因此,建议使用 ttk 控件作为开发和学习的重点。
如何创建 ttk 控件
创建 ttk 控件的方法和 tkinter 控件的方法略有不同:
创建一个 tkinter 按钮:
from tkinter import *
root = Tk()
btn = Button(root,text="tkinter 按钮")
btn.pack()
root.mainloop()
创建一个 ttk 按钮:
from tkinter import *
from tkinter import ttk
root = Tk()
btn = ttk.Button(root,text="ttk 按钮")
btn.pack()
root.mainloop()
以下是两段代码的执行结果:
从截图可以明显看出 tkinter 原生按钮的样式和 ttk 模块按钮的默认样式是不一样的。
如何设置 ttk 控件的样式
ttk 子模块的引出,主要目的是解决界面美观度和分离控制代码和样式代码的目的。
所以 ttk 在样式控制上和 tkinter 有较大区别。
下面以 Label 对象为例,通过创建一个蓝底红字的标签,说明二者的主要区别:
使用 tkinter 控件的代码:
from tkinter import *
root = Tk()
l1 = Label(text="label1",fg="red",bg="blue")
l1.pack()
root.mainloop()
使用 ttk 控件的代码:
from tkinter import *
from tkinter import ttk
root = Tk()
style_default = ttk.Style()
style_default.configure("TLabel",foreground="red",background="blue")
l1 = ttk.Label(root,text="lable1",style='TLabel')
l1.pack()
root.mainloop()
以下是代码执行的结果:
二者在展示效果上基本没有区别,主要区别在代码的编写上。
由于 ttk 分离了控件的创建代码和样式代码,所以代码看起来比较复杂,行数较多。
实际上,ttk 由于抽离了样式代码,同样的样式只需要写一次,在创建控件的时候可以直接引用,所以当控件较多时,会极大的降低工作和代码量。
而 tkinter 原生控件每次创建一个控件,都需要写一遍样式代码,所以不适合使用在稍微复杂一点的应用中。
ttk 支持的控件
ttk 带有17个控件,其中11个已经存在于 tkinter 中:Button ,Checkbutton,Entry,Frame,Label,LabelFrame,Menubutton,PanedWindow,Radiobutton,Scale 和 Scrollbar。
6个新的窗口控件类是:Combobox,Notebook,Progressbar,Separator,Sizegrip 和 Treeview。 所有这些类都是Widget的子类。
ttk 控件通用参数
ttk.Widget 类定义了 tk 风格控件的标准可选参数和通用方法,该类类似于 Java 中的接口,不应该直接实例化。
最后
❤️ 谢谢支持,喜欢的话别忘了 关注、点赞哦。