首页 > Python基础教程 > Tkinter 阅读:7,863

Python Tkinter ttk组件及用法(附带实例)

前面程序都是直接使用 tkinter 模块下的 GUI 组件的,这些组件看上去特别“复古”,也就是丑,仿佛是从 20 年前的程序上抠出来的组件。

为了弥补这点不足,Tkinter 后来引入了一个 ttk 组件作为补充(主要就是简单包装、美化一下),并使用功能更强大的 Combobox 取代了原来的 Listbox,且新增了 LabeledScale(带标签的 Scale)、Notebook(多文档窗口)、Progressbar(进度条)、Treeview(树)等组件。

ttk 作为一个模块被放在 tkinter 包下,使用 ttk 组件与使用普通的 Tkinter 组件并没有多大的区别,只要导入 ttk 模块即可。下面程序示范了如何使用 ttk 组件:
from tkinter import *
# 导入ttk
from tkinter import ttk

class App:
    def __init__(self, master):
        self.master = master
        self.initWidgets()
    def initWidgets(self):
               #listbox组件部分
        cb = Listbox(self.master, font=24)
        # 为Listbox设置列表项
        for s in ('Python', 'Swift', 'Kotlin'):
            cb.insert(END, s)
        cb.pack(side=LEFT, fill=X, expand=YES)
        f = Frame(self.master)
        f.pack(side=RIGHT, fill=BOTH, expand=YES)
        lab = Label(self.master, text='我的标签', font=24)
        lab.pack(side=TOP, fill=BOTH, expand=YES)       
        bn = Button(self.master, text='我的按钮')
        bn.pack()
        '''
        # ttk使用Combobox取代了Listbox
        cb = ttk.Combobox(self.master, font=24)
        # 为Combobox设置列表项
        cb['values'] = ('Python', 'Swift', 'Kotlin')
        cb.pack(side=LEFT, fill=X, expand=YES)
        f = ttk.Frame(self.master)
        f.pack(side=RIGHT, fill=BOTH, expand=YES)
        lab = ttk.Label(self.master, text='我的标签', font=24)
        lab.pack(side=TOP, fill=BOTH, expand=YES)
        bn = ttk.Button(self.master, text='我的按钮')
        bn.pack()
        '''
root = Tk()
root.title("简单事件处理")
App(root)
root.mainloop()
上面程序中,被注释的代码是使用 ttk 组件的代码,未被注释的代码是直接使用 Tkinter 组件的代码。直接运行上面程序,可以看到如图 1 所示的界面。

Tkinter 组件的运行界面
图 1 Tkinter 组件的运行界面

如果将上面程序中被注释的代码取消注释,并注释使用 Listbox 组件的代码,改为使用 ttk 组件,再次运行上面程序,则可以看到如图 2 所示的界面。

ttk 组件的运行界面
图 2 ttk 组件的运行界面

对比两个界面上 Tkinter 的 Button 和 ttk 的 Button,不难发现 ttk 下的 Button 更接近 Windows 7 本地平台的风格,显得更漂亮,这就是 ttk 组件的优势。