# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
# 1. 创建窗口
print("--- 第1段:创建窗口 ---")
window = tk.Tk()
window.title("我的第一个窗口")
window.geometry("400x300") # 宽x高
window.mainloop() # 让窗口一直显示,这是核心!
| 组件 | 作用 | 代码 |
|---|---|---|
| Label | 显示文字 | tk.Label(window, text="文字") |
| Button | 按钮 | tk.Button(window, text="文字", command=函数) |
.pack() |
把组件放到窗口上 | 组件.pack() |
.config() |
修改组件属性 | 组件.config(text=”新文字”) |
____________
# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
# 2. 窗口里加标签和按钮
window = tk.Tk()
window.title("第2段:标签和按钮")
window.geometry("400x300")
# 标签:显示文字
label = tk.Label(window, text="你好,火鸟!", font=("微软雅黑", 20))
label.pack(pady=30) # pady=上下留30像素间距
# 按钮:点击触发动作
def on_click():
label.config(text="你点了按钮!") # 修改标签的文字
button = tk.Button(window, text="点我", font=("微软雅黑", 14), command=on_click)
button.pack(pady=10)
window.mainloop()
____________
# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
# 3. 输入框:让用户输入内容
window = tk.Tk()
window.title("第3段:输入框")
window.geometry("400x300")
# 输入框
entry = tk.Entry(window, font=("微软雅黑", 14), width=20)
entry.pack(pady=20)
entry.insert(0, "请输入名字") # 设置默认提示文字
# 标签:显示结果
label = tk.Label(window, text="", font=("微软雅黑", 14))
label.pack(pady=10)
# 按钮:获取输入并显示
def greet():
name = entry.get() # 获取输入框的内容
if name:
label.config(text=f"你好,{name}!")
else:
label.config(text="请输入名字!")
button = tk.Button(window, text="打招呼", font=("微软雅黑", 14), command=greet)
button.pack(pady=10)
window.mainloop()
____________
# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
# 4. 列表框:显示多个选项
window = tk.Tk()
window.title("第4段:列表框")
window.geometry("400x400")
# 列表框:显示联系人
listbox = tk.Listbox(window, font=("微软雅黑", 12), width=25, height=10)
listbox.pack(pady=20)
# 添加数据到列表框
contacts = ["张三 13800001111", "李四 13800002222", "王五 13800003333",
"赵六 13800004444", "火鸟 13518667656"]
for contact in contacts:
listbox.insert(tk.END, contact) # tk.END表示插入到末尾
# 标签:显示选中的内容
label = tk.Label(window, text="请选择一个联系人", font=("微软雅黑", 12))
label.pack(pady=10)
# 按钮:获取选中的联系人
def on_select():
selection = listbox.curselection() # 获取选中的索引(返回元组)
if selection:
index = selection[0] # 取第一个索引
name = listbox.get(index) # 根据索引取内容
label.config(text=f"你选了:{name}")
else:
label.config(text="请先选择一个联系人!")
button = tk.Button(window, text="确认选择", font=("微软雅黑", 12), command=on_select)
button.pack(pady=10)
window.mainloop()
| 组件/方法 | 作用 |
|---|---|
tk.Listbox |
列表框,显示多个选项 |
listbox.insert(tk.END, 内容) |
往列表末尾添加一项 |
listbox.curselection() |
获取当前选中的索引 |
listbox.get(index) |
根据索引取内容 |
____________
# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
# 5. 布局管理:用 frame 组织界面
window = tk.Tk()
window.title("第5段:布局管理")
window.geometry("400x400")
# 顶部区域
top_frame = tk.Frame(window)
top_frame.pack(fill=tk.X, padx=10, pady=10)
tk.Label(top_frame, text="姓名:", font=("微软雅黑", 12)).pack(side=tk.LEFT)
entry_name = tk.Entry(top_frame, font=("微软雅黑", 12), width=15)
entry_name.pack(side=tk.LEFT, padx=5)
# 中部区域
mid_frame = tk.Frame(window)
mid_frame.pack(fill=tk.BOTH, expand=True, padx=10)
tk.Label(mid_frame, text="电话:", font=("微软雅黑", 12)).pack(side=tk.LEFT)
entry_phone = tk.Entry(mid_frame, font=("微软雅黑", 12), width=15)
entry_phone.pack(side=tk.LEFT, padx=5)
# 列表框区域
listbox = tk.Listbox(window, font=("微软雅黑", 12), width=35, height=8)
listbox.pack(padx=10, pady=10)
# 底部按钮区域
bottom_frame = tk.Frame(window)
bottom_frame.pack(fill=tk.X, padx=10, pady=10)
def add_contact():
name = entry_name.get().strip()
phone = entry_phone.get().strip()
if name and phone:
listbox.insert(tk.END, f"{name} {phone}")
entry_name.delete(0, tk.END)
entry_phone.delete(0, tk.END)
else:
label_msg.config(text="姓名和电话不能为空!")
def del_contact():
selection = listbox.curselection()
if selection:
listbox.delete(selection[0])
label_msg.config(text="已删除")
else:
label_msg.config(text="请先选择一个联系人")
tk.Button(bottom_frame, text="添加", font=("微软雅黑", 12), command=add_contact).pack(side=tk.LEFT, padx=5)
tk.Button(bottom_frame, text="删除", font=("微软雅黑", 12), command=del_contact).pack(side=tk.LEFT, padx=5)
# 消息提示
label_msg = tk.Label(window, text="", font=("微软雅黑", 11), fg="red")
label_msg.pack()
window.mainloop()
| 概念 | 作用 |
|---|---|
tk.Frame |
容器,把多个组件归到一组 |
side=tk.LEFT |
在 Frame 内从左往右排列 |
fill=tk.X |
水平填满 |
entry.delete(0, tk.END) |
清空输入框 |
listbox.delete(index) |
删除列表中指定项 |
fg="red" |
字体颜色设为红色 |
__________________
tkinter 核心概念速查:
| 组件 | 作用 |
|---|---|
tk.Tk() |
创建窗口 |
tk.Label |
显示文字 |
tk.Button |
按钮 |
tk.Entry |
输入框 |
tk.Listbox |
列表框 |
tk.Frame |
容器分组 |
| 关键操作 | 代码 |
|---|---|
| 显示窗口 | window.mainloop() |
| 组件放入窗口 | .pack() |
| 修改属性 | .config(text="新文字") |
| 获取输入框内容 | entry.get() |
| 清空输入框 | entry.delete(0, tk.END) |
| 绑定事件 | widget.bind("<Return>", 函数) |
__________________
# === 第14课:tkinter 图形界面基础 ===
import tkinter as tk
from tkinter import messagebox
# 6. 消息对话框和菜单
window = tk.Tk()
window.title("第6段:对话框和菜单")
window.geometry("400x300")
# 菜单栏
menubar = tk.Menu(window)
# 菜单1:文件
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="新建", command=lambda: messagebox.showinfo("提示", "新建成功!"))
file_menu.add_command(label="保存", command=lambda: messagebox.showinfo("提示", "保存成功!"))
file_menu.add_separator() # 分隔线
file_menu.add_command(label="退出", command=window.quit)
menubar.add_cascade(label="文件", menu=file_menu)
# 菜单2:帮助
help_menu = tk.Menu(menubar, tearoff=0)
help_menu.add_command(label="关于", command=lambda: messagebox.showinfo("关于", "通讯录 v1.0\n作者:火鸟"))
menubar.add_cascade(label="帮助", menu=help_menu)
window.config(menu=menubar)
# 按钮:演示不同类型的对话框
def show_info():
messagebox.showinfo("提示", "这是一条普通提示")
def show_warning():
messagebox.showwarning("警告", "数据可能丢失!")
def show_error():
messagebox.showerror("错误", "操作失败!")
def ask_question():
result = messagebox.askyesno("确认", "确定要删除吗?")
if result:
label.config(text="你选了:是")
else:
label.config(text="你选了:否")
tk.Button(window, text="普通提示", font=("微软雅黑", 12), command=show_info).pack(pady=5)
tk.Button(window, text="警告提示", font=("微软雅黑", 12), command=show_warning).pack(pady=5)
tk.Button(window, text="错误提示", font=("微软雅黑", 12), command=show_error).pack(pady=5)
tk.Button(window, text="确认对话框", font=("微软雅黑", 12), command=ask_question).pack(pady=5)
label = tk.Label(window, text="", font=("微软雅黑", 12))
label.pack(pady=10)
window.mainloop()
| 组件/方法 | 作用 |
|---|---|
messagebox.showinfo() |
普通提示框 |
messagebox.showwarning() |
警告提示框 |
messagebox.showerror() |
错误提示框 |
messagebox.askyesno() |
是/否确认框,返回 True/False |
tk.Menu |
菜单栏 |
add_command(label=, command=) |
添加菜单项 |
add_separator() |
菜单分隔线 |
add_cascade(label=, menu=) |
添加下拉菜单 |
lambda: ... |
匿名函数,简单操作不需要单独定义函数 |
__________________
未经允许不得转载:百花谷博客 » 跟着AI学Python 第14课:tkinter 图形界面基础

百花谷博客
微信关注,获取更多