当前位置:首页>python>Python Tkinter快速入门

Python Tkinter快速入门

  • 2026-09-10 04:16:32
Python Tkinter快速入门

Tkinter 快速入门

Tkinter 是 Python 内置GUI库,无需pip安装,import tkinter as tk 直接用。

适用:小工具、桌面表单、简单窗体程序;不适合大型华丽界面。

1. 最小窗口模板

import tkinter as tk

# 1. 创建主窗口
root = tk.Tk()
root.title("我的窗口")   # 窗口标题
root.geometry("600x400") # 窗口大小 宽x高

# 2. 放置组件(按钮、标签、输入框等)
tk.Label(root, text="Hello Tkinter").pack()

# 3. 主消息循环,必须写在最后,启动窗口
root.mainloop()

运行就弹出窗口,所有GUI代码写在mainloop之前。


三大布局管理器(重中之重)

三选一,同一个父容器不要混用多种布局!

  1. 1. .pack():简单上下/左右堆叠,适合简单排版
  2. 2. .grid():表格网格,你上面的诊断复选框就是用grid,行列布局,最常用表单
  3. 3. .place():绝对坐标 x,y,很少用,窗口缩放会乱

pack常用参数

widget.pack(
    side="top",      # top/bottom/left/right
    fill="x",        # x横向填满 / y纵向 / both全部填满
    expand=True,     # 是否抢占剩余空间
    padx=10, pady=10# 外边距
)

grid常用参数(你代码在用)

widget.grid(
    row=0, column=0,    # 行、列,从0开始
    sticky="w",         # 对齐 n/s/e/w 北南东西;w=靠左,ew=左右拉伸
    padx=5, pady=5,     # 单元格外边距
)
# 列权重:窗口拉伸时分配多余空间
parent.grid_columnconfigure(0, weight=1)
# 行权重
parent.grid_rowconfigure(0, weight=1)

LabelFrame 带标题分组框(你的诊断区域)

frame = tk.LabelFrame(root, text="分组标题", padx=5,pady=5)
frame.pack(fill="x",pady=5)
# 组件全部放到 frame 里面,第一个参数填父容器
tk.Checkbutton(frame,text="选项1").grid(row=0,column=0)

常用组件速查

1. Label 标签(显示文字)

lab = tk.Label(root, text="显示文字", fg="red", font=("微软雅黑",11))
lab.pack()
# 动态改文字
lab.config(text="新的文字")

2. Button 按钮

defbtn_click():
print("按钮被点击")

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

command 传函数名,不要加括号command=btn_click,不要写 btn_click()

3. Entry 单行输入框

var = tk.StringVar()
entry = tk.Entry(root, textvariable=var)
entry.pack()
# 获取值
print(var.get())
# 设置值
var.set("默认内容")

4. Text 多行文本框

text = tk.Text(root, height=6)
text.pack(fill="x")
text.insert("end","写入内容\n")  # end代表末尾
content = text.get("1.0", "end") # 获取全部文本,1.0第一行第0字符
text.delete("1.0","end") # 清空

5. Checkbutton 复选框(你的诊断代码)

绑定 BooleanVar,True/False

v = tk.BooleanVar(value=False)
cb = tk.Checkbutton(root, text="选项A", variable=v, command=lambda:print(v.get()))
cb.pack()

⚠️循环创建复选框 lambda闭包陷阱:lambda n=name:func(n)

6. Radiobutton 单选框,绑定StringVar

v = tk.StringVar(value="1")
tk.Radiobutton(root, text="选项1", variable=v, value="1").pack()
tk.Radiobutton(root, text="选项2", variable=v, value="2").pack()

7. Combobox下拉框(需要导入ttk)

from tkinter import ttk
com = ttk.Combobox(root, values=["A","B","C"])
com.pack()
com.set("A")
print(com.get())

Tkinter变量:StringVar,BooleanVar,IntVar,DoubleVar

专门绑定界面控件,界面修改自动同步变量,set()修改变量界面自动刷新

  • • .get() 获取值
  • • .set(值) 设置值
s = tk.StringVar()
i = tk.IntVar()
b = tk.BooleanVar()

面向对象写法(你项目用的 self.xxx)

实际项目,都会封装class,避免全局变量,和你现有代码风格一致

import tkinter as tk

classMyApp:
def__init__(self, root):
self.root = root
self.root.title("面向对象示例")

# 变量加self,全类都可以访问
self.check_var = tk.BooleanVar()

        tk.Checkbutton(root,text="测试",variable=self.check_var,command=self.cb_func).pack()

defcb_func(self):
print(self.check_var.get())

if __name__ == "__main__":
    r = tk.Tk()
    app = MyApp(r)
    r.mainloop()

高频踩坑清单

  1. 1. ❌command=func() 加括号:程序启动立刻执行函数,点击无效
    ✅ command=func
  2. 2. ❌循环里lambda闭包:lambda:func(name),全部取循环最后一个值
    ✅ lambda n=name:func(n)
  3. 3. ❌grid/pack/place混用在同一个父组件,直接布局错乱

    一个父容器只能选一种布局管理器

  4. 4. ❌窗口拉伸,组件不跟着变大:忘记 grid_columnconfigure(列,weight=1)
  5. 5. ❌Text获取内容直接 text.get(),必须 get("1.0","end")
  6. 6. mainloop() 写前面,窗口一闪而过;mainloop()永远放代码最后

最新文章

随机文章