c语言编程笔录

首页 >   > 笔记大全

笔记大全

优化你的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()