IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python编程实例-Tkinter GUI编程-Styles -> 正文阅读

[Python知识库]Python编程实例-Tkinter GUI编程-Styles

Styles

本文将介绍 ttk 样式,如何使用和自定义小部件的样式,以及如何通过扩展内置样式来更改小部件的外观。

1、TTK Sytles介绍

确定 ttk 小部件外观的样式集合的主题。样式是对小部件类外观的描述。 通常,主题带有一组预定义的样式。因此,要更改 ttk 小部件的外观,包含如下内容:

  • 修改内置样式
  • 创建新样式

通常,ttk 小部件的样式名称以字母“T”开头,后跟小部件名称,例如 TLabel 和 TButton。

在 Tkinter 中,每个小部件都有一个默认的小部件类。 小部件类定义小部件的默认样式。

下表显示了常见 ttk 小部件类的样式名称:

Widget类型Style 名称
ButtonTButton
CheckbuttonTCheckbutton
ComboboxTCombobox
EntryTEntry
FrameTFrame
LabelTLabel
LabelFrameTLabelFrame
MenubuttonTMenubutton
NotebookTNotebook
PanedWindowTPanedwindow
Progressbar*Horizontal.TProgressbar or Vertical.TProgressbar, depending on the orient option.
RadiobuttonTRadiobutton
Scale*Horizontal.TScale or Vertical.TScale, depending on the orient option.
Scrollbar*Horizontal.TScrollbar or Vertical.TScrollbar, depending on the orient option
SeparatorTSeparator
SizegripTSizegrip
Treeview*Treeview

注意:(*) Progressbar、Scale、Scrollbar 和 Treeview 小部件的样式名称不以字母 T 开头。

在运行时,可以通过调用小部件实例的 winfo_class() 方法来获取小部件的小部件类。

以下示例使用 winfo_class() 方法获取按钮小部件的小部件类:

button = ttk.Button(root, text='Click Me')
print(button.winfo_class())

输出:

TButton

2、修改内置 ttk 样式

每种样式都有一组定义小部件外观的选项。要修改样式的外观,请使用 Style 类的 configure() 方法:

style = ttk.Style(root)
style.configure(style_name, **options)

以下代码演示了如何通过修改 TLabel 和 TButton 的样式来更改所有 Label 和 Button 小部件的字体:

import tkinter as tk
from tkinter import ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x110')
        self.resizable(0, 0)
        self.title('Login')

        # UI options
        paddings = {'padx': 5, 'pady': 5}
        entry_font = {'font': ('Helvetica', 11)}

        # configure the grid
        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=3)

        username = tk.StringVar()
        password = tk.StringVar()

        # username
        username_label = ttk.Label(self, text="Username:")
        username_label.grid(column=0, row=0, sticky=tk.W, **paddings)

        username_entry = ttk.Entry(self, textvariable=username, **entry_font)
        username_entry.grid(column=1, row=0, sticky=tk.E, **paddings)

        # password
        password_label = ttk.Label(self, text="Password:")
        password_label.grid(column=0, row=1, sticky=tk.W, **paddings)

        password_entry = ttk.Entry(
            self, textvariable=password, show="*", **entry_font)
        password_entry.grid(column=1, row=1, sticky=tk.E, **paddings)

        # login button
        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=1, row=3, sticky=tk.E, **paddings)

        # configure style
        self.style = ttk.Style(self)
        self.style.configure('TLabel', font=('Helvetica', 11))
        self.style.configure('TButton', font=('Helvetica', 11))


if __name__ == "__main__":
    app = App()
    app.mainloop()

运行结果:

在这里插入图片描述

示例代码如何工作?

第一步,创建 ttk.Style 类的新实例

self.style = ttk.Style(self)

第二步,使用 Style 对象的 configure() 方法更改 TLabel 和 TButton 样式的字体

self.style.configure('TLabel', font=('Helvetica', 12))
self.style.configure('TButton', font=('Helvetica', 12))

3、扩展内置 ttk 样式

要创建从内置样式派生的新样式,请使用如下样式名称:

new_style.builtin_style

例如,要创建用于显示标题的 Label 小部件的新样式,可以将其命名如下:

Heading.TLabel

Heading.TLabel 样式继承了内置 TLabel 样式的所有选项。

要覆盖特定选项,还可以使用 Style 类的 configure() 方法:

style = ttk.Style(self)
style.configure(custom_style, **options)

从 TLabel 样式派生的样式示例如下:

import tkinter as tk
from tkinter import ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x150')
        self.resizable(0, 0)
        self.title('Login')

        # UI options
        paddings = {'padx': 5, 'pady': 5}
        entry_font = {'font': ('Helvetica', 11)}

        # configure the grid
        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=3)

        username = tk.StringVar()
        password = tk.StringVar()

        # heading
        heading = ttk.Label(self, text='Member Login', style='Heading.TLabel')
        heading.grid(column=0, row=0, columnspan=2, pady=5, sticky=tk.N)

        # username
        username_label = ttk.Label(self, text="Username:")
        username_label.grid(column=0, row=1, sticky=tk.W, **paddings)

        username_entry = ttk.Entry(self, textvariable=username, **entry_font)
        username_entry.grid(column=1, row=1, sticky=tk.E, **paddings)

        # password
        password_label = ttk.Label(self, text="Password:")
        password_label.grid(column=0, row=2, sticky=tk.W, **paddings)

        password_entry = ttk.Entry(
            self, textvariable=password, show="*", **entry_font)
        password_entry.grid(column=1, row=2, sticky=tk.E, **paddings)

        # login button
        login_button = ttk.Button(self, text="Login")
        login_button.grid(column=1, row=3, sticky=tk.E, **paddings)

        # configure style
        self.style = ttk.Style(self)
        self.style.configure('TLabel', font=('Helvetica', 11))
        self.style.configure('TButton', font=('Helvetica', 11))

        # heading style
        self.style.configure('Heading.TLabel', font=('Helvetica', 12))


if __name__ == "__main__":
    app = App()
    app.mainloop()

运行结果:

在这里插入图片描述

示例代码如何工作?

第一步,向窗口添加标题并将样式 Heading.TLabel 分配给 Label 小部件的样式选项

heading = ttk.Label(self, text='Member Login', style='Heading.TLabel')

第二步,将 Heading.TLabel 样式的字体更改为 Helvetica,12 像素

self.style.configure('Heading.TLabel', font=('Helvetica', 12))

4、样式的层次结构

可以创建自己的整个样式层次结构。 例如,可以拥有一个继承自内置 TLabel 样式的 Message.TLabel 样式。

然后可以创建继承自 Message.TLabel 样式的样式,例如 Error.Message.TLabel、Warning.Message.TLabel 和 Information.Message.TLabel。

当使用特定样式时,例如 Error.Message.TLabel,ttk 会首先查找 Error.Message.TLabel 样式中的选项。 如果找不到选项,它将以 Message.TLabel 样式进行搜索。 它继续搜索 TLabel 样式中的选项。

下图说明了样式层次结构的示例:

在这里插入图片描述

根样式决定了所有小部件的外观。 根样式的名称是“.”

例如,如果要将所有小部件的文本更改为 12 像素的 Helvetica 字体,可以按如下方式进行配置:

style = ttk.Style(root)
style.configure('.', font=('Helvetica', 12))
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:50:39  更:2022-04-14 23:51:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:30:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码