教程 > tkinter 教程 > 阅读:196

tkinter 主题——迹忆客-ag捕鱼王app官网

当前的 tk 组件主题功能是新组件集最强大和令人兴奋的功能之一。但是,这也是最令人困惑的事情之一。

本教程演示了主题的样式,它控制了组件在 tkinter gui 中的外观。换句话说,我们可以说按钮外观和其他组件应该是什么样子。


tkinter gui 中的主题

这是一组样式,用于定义 gui 中的每个组件的外观。主题修改增强了 gui 外观,与普通的 tkinter gui 外观不同。

然而,在它被删除之前,很少有应用程序会从可能不同的运动、游戏或教育计划等不断变化的主题中受益。

不同平台的主题可能不同,尤其是 macos 和 windows。tkinter 允许你将当前主题更改为另一个主题。

如果你将当前主题更改为新主题,tkinter 会将样式应用于所有 ttk 组件。我们需要创建一个 ttk.style 类的实例来获取主题。

style = ttk.style(window)

style 帮助用户避免冗余和重复的代码。

如果你的应用中有 20 个按钮组件,则创建一个 style 对象,那么你无需在创建组件时重复外观细节。这样,组件看起来很时尚。

由于 style 将有关外观的所有信息收集在一个位置,因此其他组件的按钮样式和样式可以共享共同特征,从而提高一致性和重用性。

我们需要使用 theme_use() 方法获取可用主题并打印可用主题。

print(style.theme_names())

输出结果:

('winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative')

如果我们需要获取当前主题,我们可以使用 theme_use() 方法来使用它。

style.theme_use()

我们可以使用 selected_theme 类选择其他主题来使用不同的主题; get() 方法将有助于获得该主题。

style.theme_use(window.selected_theme.get())

我们在这个循环中生成了多个 radiobutton,它们存储主题名称并在每次迭代时获取单独的值。

for theme_name in style.theme_names():
    # create a bulk of radio buttons using loop
    radio_buttons = ttk.radiobutton(
        theme_frame,
        text=theme_name,
        value=theme_name,
        variable=window.selected_theme,
        command=theme_changer)
    radio_buttons.pack(expand=true, fill='both')

command 选项持有 theme_changer 函数以在用户选择单选按钮时调用。

此函数将使用 e 在 radiobutton 组件选项中传递的 stringvar() 类更改主题。

def theme_changer():
    # change  theme
    style.theme_use(window.selected_theme.get())

完整源代码:

from tkinter import *
from tkinter import ttk
# create gui window
window=tk()
window.title('delftstack')
window.geometry('500x400')
# create style object
style = ttk.style(window)
def theme_changer():
    # change  theme
    style.theme_use(window.selected_theme.get())
label = ttk.label(window, text='name:')
label.grid(column=0, row=0, padx=10, pady=10,  sticky='w')
entry = ttk.entry(window)
entry.grid(column=1, row=0, padx=10, pady=10,  sticky='w')
button = ttk.button(window, text='press')
button.grid(column=2, row=0, padx=10, pady=10,  sticky='w')
window.selected_theme = stringvar()
theme_frame = ttk.labelframe(window, text='themes')
theme_frame.grid(padx=10, pady=10, ipadx=20, ipady=20, sticky='w')
for theme_name in style.theme_names():
    # create a bulk of radio buttons using loop
    radio_buttons = ttk.radiobutton(
        theme_frame,
        text=theme_name,
        value=theme_name,
        variable=window.selected_theme,
        command=theme_changer)
    radio_buttons.pack(expand=true, fill='both')
window.mainloop()
print(style.theme_names())

输出结果:

在 tkinter gui 中选择一个主题

查看笔记

扫码一下
查看教程更方便
网站地图