📚 目录 附录 A 常用控件速查表(tk vs ttk)

附录 A 常用控件速查表(tk vs ttk)

星级说明:★ 了解 · ★★ 理解 · ★★★ 掌握 · ★★★★ 重点必会。

一、tk 原生控件 vs ttk 主题控件:先搞清区别

tkinter 里每个控件其实有两套来源,这是新手最容易迷糊的地方:

本书约定:第 1~6 章为了让你先把"选项、布局、回调"这些概念吃透,统一用 tk.xxx 原生控件;从第 7 章起,优先改用 ttk.xxx,让界面更美观、更专业。下表每一行都标了"推荐用哪个",你照着选即可。


二、控件总览速查表

列说明:tk 名 与 ttk 名 写"(无)"表示官方只有那一套;重要构造选项 与 常用方法 只列最常用 2~4 个;推荐 列给出本书建议,★ 越多越该优先掌握。
控件tk 名ttk 名一句话用途重要构造选项常用方法推荐
文字标签tk.Labelttk.Label显示只读文字 / 图片text、font、fg/bg、imageconfig()、cget()、pack()tk/ttk 皆可(★ 了解)
按钮tk.Buttonttk.Button点击触发动作text、command、state、imageconfig()、invoke()、flash()优先 ttk.Button(★★★)
单行输入框tk.Entryttk.Entry单行文本输入textvariable、show(密码掩码)、widthget()、insert()、delete()优先 ttk.Entry(★★★)
多行文本框tk.Text(无)多行富文本编辑width、height、wrap、fontget("1.0","end")、insert()、delete()仅 tk.Text(★★★)
复选框tk.Checkbuttonttk.Checkbutton多选勾选(可多开)text、variable、onvalue/offvalue、commandconfig()、invoke()、deselect()优先 ttk.Checkbutton(★★★)
单选框tk.Radiobuttonttk.Radiobutton一组里选一个text、variable、value、commandconfig()、invoke()、select()优先 ttk.Radiobutton(★★★)
下拉框(无)ttk.Combobox下拉选择 + 可手输values、textvariable、state、widthget()、current()、set()仅 ttk.Combobox(★★★)
滑块tk.Scalettk.Scale拖动选数值from_、to、orient、variable、commandget()、set()、config()优先 ttk.Scale(★★)
微调框tk.Spinboxttk.Spinbox上下箭头调数值/列表from_/to、values、textvariable、incrementget()、set()、invoke()优先 ttk.Spinbox(★★)
列表框tk.Listbox(无)列表单选/多选listvariable、selectmode、heightinsert()、delete()、get()、curselection()仅 tk.Listbox(★★)
滚动条tk.Scrollbarttk.Scrollbar配合可滚动控件orient、command(接 yview/xview)set()、get()、config()优先 ttk.Scrollbar(★★)
树形/表格(无)ttk.Treeview表格或树形数据columns、show、height、selectmodeinsert()、delete()、get_children()、item()、heading()仅 ttk.Treeview(★★★★)
容器框架tk.Framettk.Frame装其它控件的容器padding、width、height、relief布局方法 + config()优先 ttk.Frame(★★)
带标题分组框tk.LabelFramettk.LabelFrame带标题的分组容器text、padding、labelanchorconfig()、pack()优先 ttk.LabelFrame(★★)
选项卡(无)ttk.Notebook分页/标签页切换(无必须项)、paddingadd()、tab()、select()、index()仅 ttk.Notebook(★★★)
分隔窗格tk.PanedWindowttk.Panedwindow可拖动分隔的多窗格orient、showhandle、sashwidthadd()、panes()、sash_place()优先 ttk.Panedwindow(★)
画布tk.Canvas(无)画线/圆/图等图形width、height、bg、scrollregioncreate_oval()、create_rectangle()、create_line()、delete()仅 tk.Canvas(★★★)
进度条(无)ttk.Progressbar显示任务进度orient、maximum、value、mode、lengthstart()、stop()、step()、config()仅 ttk.Progressbar(★★)
菜单tk.Menu(无)菜单栏 / 右键菜单tearoff、labeladd_command()、add_cascade()、add_separator()、post()仅 tk.Menu(★★★)
菜单按钮tk.Menubuttonttk.Menubutton自带下拉菜单的按钮text、menu、directionconfig()、pack()优先 ttk.Menubutton(★)
长消息tk.Message(无)自动换行的长文本text、aspect、font、widthconfig()、cget()仅 tk.Message(★,Label 更常用)

三、几个容易混的"对应"关系

📌 记住口诀:"老牌基础用 tk,新潮美观用 ttk;ttk 独有记心头(Combobox/Treeview/Notebook/Progressbar),tk 独有别乱改(Text/Listbox/Canvas/Menu)。"

四、⚠️ ttk 控件没有 fg/bg !

这是第 7 章之后最容易踩的坑:ttk.Button、ttk.Label 等 ttk 控件不支持 fg=/bg= 选项——你写了也不会报错,但颜色根本不变。要改 ttk 控件的颜色、字体、边距,必须走 ttk.Style。

下面是一段合法示例(仅演示写法,语法已校验通过):

# 附录A 示例:用 ttk.Style 给 ttk 控件换颜色和字体
import tkinter as tk
from tkinter import ttk


class App:
    def __init__(self, root):
        self.root = root
        style = ttk.Style()
        # 通过 Style 配置"TButton"类控件的样式(前景/背景/字体)
        style.configure("TButton", foreground="white",
                        background="#3a7afe", font=("微软雅黑", 12))
        # 创建按钮时指定 style="TButton" 才会套用上面的样式
        btn = ttk.Button(root, text="蓝色按钮", style="TButton")
        btn.pack(padx=20, pady=20)


if __name__ == "__main__":
    root = tk.Tk()
    App(root)
    root.mainloop()
一句话总结:改 tk 控件用 fg/bg;改 ttk 控件用 ttk.Style().configure(...)。 风格细节(不同主题名、如何改整个应用主题)在正文"样式与主题"章节展开。