被 99% 的 Python 开发者忽略的 GUI 宝藏库!Tkinter 从入门到精通

被 99% 的 Python 开发者忽略的 GUI 宝藏库!Tkinter 从入门到精通

GUI 编程,我终于整明白了!

你是不是也遇到过这样的情况?

好不容易写了个 Python 脚本,功能挺强大,结果一运行------黑乎乎的终端窗口,家人朋友看了都嫌弃:"这啥?你是黑客吗?"😂

今天,我们就来学习Python 的 GUI 编程神器------Tkinter ,让你的代码长出一张漂亮的脸!🎨

这篇文章将手把手带你掌握 Tkinter 的常用控件 + 经典功能 + 页面布局零基础也能做出实用的桌面应用,建议收藏!💡


1. Tkinter 是啥?

Tkinter(发音:"Thinker"),是 Python 自带的 GUI 库,不需要额外安装,开箱即用。

它的核心思想很简单:创建一个窗口 + 放上各种控件(按钮、输入框、文本等)+ 绑定事件,最终形成一个可交互的应用。

Tkinter 适合用来做:

✅ 计算器

✅ 备忘录

✅ 定时提醒工具

✅ 批量重命名工具

✅ ...(你想得到的都可以试试)

那我们就别废话了,直接开搞!🚀


2. Tkinter 入门:你的第一个 GUI 窗口

先写个最简单的 Tkinter 窗口看看:

python 复制代码
import tkinter as tk  # 导入 Tkinter 模块

root = tk.Tk()  # 创建主窗口
root.title("Hello Tkinter!")  # 设置标题
root.geometry("400x300")  # 设置窗口大小 (宽 x 高)

root.mainloop()  # 运行窗口

运行后,你会看到一个 400x300 的空窗口,虽然啥都没有,但 GUI 的雏形已经出来了!🎉

💡 重点提醒
root.mainloop() 一定要写,它是 Tkinter 的"心跳",负责让窗口保持运行。如果你不调用它,窗口会一闪而过。


3. Tkinter 常用控件全解析!

3.1 按钮(Button)------点击触发事件

python 复制代码
import tkinter as tk

root = tk.Tk()
root.title("按钮示例")
root.geometry("300x200")

def on_click():
    print("按钮被点击了!")

btn = tk.Button(root, text="点我试试", command=on_click)
btn.pack()

root.mainloop()

点击按钮,终端就会输出 "按钮被点击了!" ,是不是很简单?💡

3.2 文本标签(Label)------展示信息

python 复制代码
label = tk.Label(root, text="你好,Tkinter!", font=("Arial", 14))
label.pack()

3.3 输入框(Entry)------获取用户输入

python 复制代码
entry = tk.Entry(root)
entry.pack()

def show_name():
    print("你输入的是:" + entry.get())

btn = tk.Button(root, text="提交", command=show_name)
btn.pack()

3.4 文本框(Text)------多行输入

python 复制代码
text = tk.Text(root, height=5, width=30)
text.pack()

3.5 复选框(Checkbutton)------多选项选择

python 复制代码
var = tk.IntVar()
chk = tk.Checkbutton(root, text="我同意协议", variable=var)
chk.pack()

def on_click():
    print("勾选了:",var.get())

btn = tk.Button(root, text="我是按钮", command=on_click)
btn.pack()

root.mainloop()

💡 重点提醒tk.IntVar()Tkinter 中的变量类,用于存储整数类型的变量,并且可以与 Tkinter 的控件(比如 Checkbutton、Radiobutton、Entry 等)进行绑定,实时获取和更新数据。可以使用 .get() 获取当前值,使用 .set(值) 进行修改

3.6 单选按钮(Radiobutton)------单选项选择

python 复制代码
var = tk.IntVar()
rb1 = tk.Radiobutton(root, text="选项 1", variable=var, value=1)
rb2 = tk.Radiobutton(root, text="选项 2", variable=var, value=2)
rb1.pack()
rb2.pack()

3.7 下拉菜单(Combobox)------让选项更优雅!

python 复制代码
from tkinter import ttk

combo = ttk.Combobox(root, values=["Python", "Java", "C++"])
combo.pack()
combo.set("Python")  # 设置默认选项

3.8 弹出消息框(Messagebox)

python 复制代码
import tkinter.messagebox as msgbox

msgbox.showinfo("提示", "你点击了按钮!")

3.9 选择文件(FileDialog)

python 复制代码
from tkinter import filedialog

def open_file():
    file_path = filedialog.askopenfilename(title="选择一个文件", 
                                           filetypes=[("文本文件", "*.txt"), ("所有文件", "*.*")])
    if file_path:  # 防止用户取消选择
        print("你选择的文件是:", file_path)

root = tk.Tk()
root.title("文件选择示例")
root.geometry("300x200")

btn_open = tk.Button(root, text="打开文件", command=open_file)
btn_open.pack(pady=20)
方法 作用
askopenfilename() 选择单个文件
askopenfilenames() 选择多个文件,返回文件列表
asksaveasfilename() 选择保存文件路径
askdirectory() 选择文件夹

4. Tkinter 布局方式全解析!

Tkinter 主要有 三种布局方式

布局方式 作用
pack() 适用于简单布局,让控件自动排列
grid() 适用于表格布局,按行列摆放
place() 适用于精确定位 ,用 x, y 坐标指定控件位置

4.1 pack()------最简单的自动布局

python 复制代码
label1 = tk.Label(root, text="上面的文本", bg="red")
label1.pack(side="top")

label2 = tk.Label(root, text="下面的文本", bg="blue")
label2.pack(side="bottom")

label3 = tk.Label(root, text="左边的文本", bg="green")
label3.pack(side="left")

label4 = tk.Label(root, text="右边的文本", bg="yellow")
label4.pack(side="right")

💡 pack(side="top") 指定控件排列方向

4.2 grid()------适合表格布局

python 复制代码
label1 = tk.Label(root, text="用户名:")
label1.grid(row=0, column=0)

entry1 = tk.Entry(root)
entry1.grid(row=0, column=1)

label2 = tk.Label(root, text="密码:")
label2.grid(row=1, column=0)

entry2 = tk.Entry(root, show="*")
entry2.grid(row=1, column=1)

💡 grid(row, column) 让控件按行列排放!

4.3 place()------精确定位

python 复制代码
btn = tk.Button(root, text="点击我")
btn.place(x=50, y=100)  # 在 (50, 100) 位置放置按钮

💡 place(x, y) 让你完全控制控件的位置


5. 项目实战:做一个简单的计算器!

python 复制代码
import tkinter as tk

# 创建主窗口
root = tk.Tk()
root.title("计算器")
root.geometry("300x400")
root.resizable(False, False)  # 禁止调整窗口大小

# 变量存储用户输入
expression = ""

# 更新输入框的函数
def update_display(value):
    global expression
    expression += str(value)
    entry_var.set(expression)

# 计算结果的函数
def calculate():
    global expression
    try:
        result = str(eval(expression))  # 计算表达式
        entry_var.set(result)
        expression = result  # 计算完之后可以继续计算
    except:
        entry_var.set("错误")
        expression = ""

# 清除输入框的函数
def clear():
    global expression
    expression = ""
    entry_var.set("")

# 创建输入框
entry_var = tk.StringVar()
entry = tk.Entry(root, textvariable=entry_var, font=("Arial", 24), justify="right", bd=10)
entry.grid(row=0, column=0, columnspan=4, ipadx=8, ipady=8, sticky="nsew")

# 按钮配置
buttons = [
    ("7", 1, 0), ("8", 1, 1), ("9", 1, 2), ("/", 1, 3),
    ("4", 2, 0), ("5", 2, 1), ("6", 2, 2), ("*", 2, 3),
    ("1", 3, 0), ("2", 3, 1), ("3", 3, 2), ("-", 3, 3),
    ("0", 4, 0), (".", 4, 1), ("=", 4, 2), ("+", 4, 3),
]

# 创建按钮并添加到界面
for (text, row, col) in buttons:
    if text == "=":
        btn = tk.Button(root, text=text, font=("Arial", 18), bg="blue", fg="white",
                        command=calculate)
    else:
        btn = tk.Button(root, text=text, font=("Arial", 18),
                        command=lambda t=text: update_display(t))
    
    btn.grid(row=row, column=col, ipadx=20, ipady=20, sticky="nsew")

# 创建清除按钮
clear_btn = tk.Button(root, text="清除", font=("Arial", 18), bg="red", fg="white",
                      command=clear)
clear_btn.grid(row=5, column=0, columnspan=4, ipadx=100, ipady=10, sticky="nsew")

# 让网格均分窗口大小
for i in range(6):  # 6行
    root.rowconfigure(i, weight=1)
for i in range(4):  # 4列
    root.columnconfigure(i, weight=1)

# 运行 Tkinter 主循环
root.mainloop()

结尾:Tkinter,真香!

你已经掌握了 Tkinter 的核心控件 + 布局技巧 + 经典功能,赶紧动手试试吧!

顺手点赞 + 在看,就是对花姐最大的支持!❤️

相关推荐
浔川python社33 分钟前
《浔川代码编辑器v2.1.0预告》
python·编辑器
Apifox43 分钟前
Apifox 4月更新|Apifox在线文档支持LLMs.txt、评论支持使用@提及成员、支持为团队配置「IP 允许访问名单」
前端·后端·ai编程
我家领养了个白胖胖1 小时前
#和$符号使用场景 注意事项
java·后端·mybatis
梓羽玩Python1 小时前
开源TTS领域迎来重磅新星!Dia-1.6B:超逼真对话生成,开源2天斩获6.5K Star!
人工智能·python·github
寻月隐君1 小时前
如何高效学习一门技术:从知到行的飞轮效应
后端·github
Andya1 小时前
Java | 深拷贝与浅拷贝工具类解析和自定义实现
后端
Andya1 小时前
Java | 基于自定义注解与AOP切面实现数据权限管控的思路和实践
后端
云原生melo荣1 小时前
快速记忆Spring Bean的生命周期
后端·spring
阿里云腾讯云谷歌云AWS代理商_小赵1 小时前
腾讯云国际站:为什么Docker适合部署在云服务器?
后端
Java中文社群1 小时前
大模型向量数据库去重的N种实现方案!
java·人工智能·后端