优化你的Python应用程序外观 使用ttk样式
更新时间:2023-12-05什么是ttk?
ttk意思是"Tk Themed Widgets",是Python Tkinter模块的一个扩展,提供了一组拥有外观和风格一致的控件,包括按钮(Button)、标签(Label)、下拉框(Combobox)等。新的控件使用c语言实现,并且调用了ttk themes来达到外观一致的效果。
from tkinter import * from tkinter import ttk window = Tk() window.title("使用ttk构建GUI") # 创建一个Label控件,并设置样式 stl = ttk.Style() stl.configure('My.TLabel', font='Helvetica 18 bold', foreground='green') label = ttk.Label(window, text="这是一个Label控件", style='My.TLabel').pack() window.mainloop()
如何在程序中使用ttk样式?
使用ttk重新设置样式,可以对程序的外观进行控制。对于标准的控件,可以使用configure()
方法设置属性值。对于新的控件,需要自定义样式,可以使用ttk.Style
类,并使用ttk.Style().configure()
方法设置样式值。
from tkinter import * from tkinter import ttk window = Tk() window.geometry("300x150") window.title("ttk Style") # 设置标准组件样式 stl = ttk.Style() stl.configure('TButton', font=('Helvetica', 12, 'bold'), foreground='blue') btn1 = ttk.Button(window, text="创建标准按钮样式").pack() # 自定义一个新的样式 stl.configure('My.TLabel', font='Helvetica 18 bold', foreground='red') label = ttk.Label(window, text="创建自定义标签样式", style='My.TLabel').pack() window.mainloop()
如何使用内置的ttk样式?
ttk样式提供了一些内置的主题,可以使程序的外观更加统一和美观。通过使用ttk.Style().theme_use()
方法,可以指定当前程序的主题。内置的主题包括:aqua、clam、alt、default、classic、vista和xpnative。
from tkinter import * from tkinter import ttk window = Tk() window.geometry("300x150") window.title("内置的ttk样式") # 指定主题 stl = ttk.Style() stl.theme_use('clam') label = ttk.Label(window, text='内置主题演示').pack() window.mainloop()
如何创建自定义的ttk样式?
在ttk.Style
中创建自定义的样式有三个步骤:首先,通过ttk.Style().configure()
方法定义一个新样式;之后,使用ttk.Style().map
方法为新样式添加主题的配置;最后,使用ttk.Style()
实例化一个新的控件,并指定自定义样式。
from tkinter import * from tkinter import ttk window = Tk() window.geometry("320x220") window.title("自定义样式") # 自定义样式 stl = ttk.Style() stl.configure('My.TButton', font=('Helvetica', 14, 'bold'), foreground='green') stl.map('My.TButton', background=[('active', 'green'), ('disabled', 'grey')], foreground=[('active', 'red')]) # 新建控件并使用自定义样式 btn1 = ttk.Button(window, text='自定义按钮1', style='My.TButton') btn1.pack(pady=10, padx=5) btn2 = ttk.Button(window, text='自定义按钮2', style='My.TButton', state='disabled') btn2.pack(pady=10, padx=5) window.mainloop()