Python学习日记10 图形用户界面GUI12.1 GUI 概述12.1.1 什么是 GUIGUIGraphical User Interface图形用户界面是程序与用户交互的一种方式通过窗口、按钮、文本框、菜单等可视化控件来接收用户输入和显示输出相比命令行界面CLI更直观、更友好。12.1.2 Python 的 GUI 工具包本章介绍Tkinter因为它是 Python 自带的开箱即用。12.2 第一个 Tkinter 程序12.2.1 创建主窗口import tkinter as tk # 创建主窗口 root tk.Tk() root.title(我的第一个GUI程序) # 进入主事件循环 root.mainloop()代码解读tk.Tk()创建主窗口对象title()设置窗口标题mainloop()进入事件循环等待用户操作点击、按键等12.2.2 添加控件import tkinter as tk root tk.Tk() root.title(按钮示例) # 创建按钮控件 btn tk.Button() btn[text] 点击我 # 设置按钮文本 btn.pack() # 布局——将按钮放入窗口 root.mainloop()代码解读Button()创建按钮控件pack()布局管理器将控件放入窗口控件的属性可以像字典一样访问和修改12.2.3 添加事件响应import tkinter as tk def on_click(): print(按钮被点击了) root tk.Tk() root.title(事件响应示例) btn tk.Button() btn[text] 点击我 btn[command] on_click # 绑定点击事件 btn.pack() root.mainloop()代码解读command属性绑定按钮被点击时调用的函数点击按钮时on_click()函数自动执行12.2.4 使用构造函数配置import tkinter as tk def on_click(): print(按钮被点击了) root tk.Tk() root.title(简洁写法) # 在创建时直接配置属性 btn tk.Button(text点击我, commandon_click) btn.pack() root.mainloop()12.2.5 使用config()方法import tkinter as tk root tk.Tk() btn tk.Button() btn.config(text点击我, commandlambda: print(Clicked!)) btn.pack() root.mainloop()12.3 常用控件12.3.1 标签Labelimport tkinter as tk root tk.Tk() root.title(标签示例) # 创建文本标签 label tk.Label(text这是一个标签, font(Arial, 16), fgblue) label.pack() root.mainloop()12.3.2 文本框EntryEntry用于输入单行文本。import tkinter as tk def show_text(): print(entry.get()) # 获取输入框内容 root tk.Tk() root.title(输入框示例) entry tk.Entry() entry.pack() btn tk.Button(text提交, commandshow_text) btn.pack() root.mainloop()12.3.3 文本区域Text / ScrolledTextText用于多行文本输入ScrolledText自带滚动条。import tkinter as tk from tkinter.scrolledtext import ScrolledText root tk.Tk() root.title(文本区域示例) # 创建可滚动文本区域 text_area ScrolledText(height10, width40) text_area.pack() def get_text(): content text_area.get(1.0, tk.END) # 获取全部文本 print(content) btn tk.Button(text获取内容, commandget_text) btn.pack() root.mainloop()get()方法的参数1.0第1行第0列文件开头tk.END文本末尾tk.INSERT当前光标位置12.3.4 按钮Buttonimport tkinter as tk root tk.Tk() # 创建带文字和颜色的按钮 btn1 tk.Button(text普通按钮, bglightblue) btn1.pack() # 创建带图标的按钮需要图像文件 # img tk.PhotoImage(fileicon.png) # btn2 tk.Button(text带图标, imageimg, compoundleft) # btn2.pack() root.mainloop()12.4 布局管理器布局管理器决定控件在窗口中的位置和大小。12.4.1pack()—— 堆叠布局pack()将控件依次堆叠在窗口中。import tkinter as tk root tk.Tk() # 默认从上到下排列 tk.Button(text按钮1).pack() tk.Button(text按钮2).pack() tk.Button(text按钮3).pack() root.mainloop()常用参数# 水平排列 tk.Button(text左, bgred).pack(sidetk.LEFT, padx5) tk.Button(text中, bggreen).pack(sidetk.LEFT, padx5) tk.Button(text右, bgblue).pack(sidetk.LEFT, padx5) # 填充和扩展 tk.Button(text填充).pack(filltk.X, expandTrue)12.4.2grid()—— 网格布局grid()将控件放在表格网格中适合复杂布局。import tkinter as tk root tk.Tk() # 创建标签和输入框对 tk.Label(text用户名).grid(row0, column0, stickye) tk.Entry().grid(row0, column1) tk.Label(text密码).grid(row1, column0, stickye) tk.Entry().grid(row1, column1) tk.Button(text登录).grid(row2, column0, columnspan2) root.mainloop()常用参数12.4.3place()—— 绝对定位place()直接指定控件的精确位置不推荐在不同分辨率下显示效果差。import tkinter as tk root tk.Tk() root.geometry(300x200) tk.Button(text精确位置).place(x100, y80, width100, height30) root.mainloop()12.5 事件处理12.5.1 使用bind()绑定事件除了command属性外Tkinter 提供bind()方法绑定更广泛的事件。import tkinter as tk def on_click(event): print(f鼠标点击位置({event.x}, {event.y})) root tk.Tk() root.geometry(400x300) root.bind(Button-1, on_click) # 左键点击 root.mainloop()12.5.2 常见事件12.5.3 事件对象属性def on_event(event): print(f控件{event.widget}) print(fX坐标{event.x}) print(fY坐标{event.y}) print(f按键{event.keysym}) print(f字符{event.char})12.5.4 键盘事件示例import tkinter as tk root tk.Tk() def on_key(event): if event.keysym Escape: root.quit() else: print(f按下了{event.keysym}) root.bind(Key, on_key) root.focus_set() # 让窗口获得焦点 root.mainloop()12.6 综合示例简单的文本编辑器下面是一个包含打开文件、保存文件、编辑文本功能的简单 GUI 文本编辑器。import tkinter as tk from tkinter.scrolledtext import ScrolledText from tkinter import messagebox class SimpleEditor: 简单的文本编辑器 def __init__(self): self.root tk.Tk() self.root.title(简易文本编辑器) # 文件名输入框 self.filename tk.Entry(self.root) self.filename.pack(sidetk.LEFT, expandTrue, filltk.X, padx5, pady5) # 工具栏 toolbar tk.Frame(self.root) toolbar.pack(sidetk.TOP, filltk.X) tk.Button(toolbar, text打开, commandself.open_file).pack(sidetk.LEFT, padx2) tk.Button(toolbar, text保存, commandself.save_file).pack(sidetk.LEFT, padx2) # 文本编辑区域 self.text_area ScrolledText(self.root, height20) self.text_area.pack(expandTrue, filltk.BOTH, padx5, pady5) self.root.mainloop() def open_file(self): 打开文件并显示内容 filename self.filename.get().strip() if not filename: messagebox.showwarning(警告, 请输入文件名) return try: with open(filename, r, encodingutf-8) as f: content f.read() self.text_area.delete(1.0, tk.END) # 清空 self.text_area.insert(tk.INSERT, content) # 插入内容 except FileNotFoundError: messagebox.showerror(错误, f文件 {filename} 不存在) except Exception as e: messagebox.showerror(错误, f读取文件失败{e}) def save_file(self): 保存当前内容到文件 filename self.filename.get().strip() if not filename: messagebox.showwarning(警告, 请输入文件名) return try: content self.text_area.get(1.0, tk.END) with open(filename, w, encodingutf-8) as f: f.write(content) messagebox.showinfo(成功, 文件已保存) except Exception as e: messagebox.showerror(错误, f保存文件失败{e}) if __name__ __main__: SimpleEditor()运行效果顶部输入框输入文件名点击打开加载文件内容到文本区域编辑后点击保存写入文件12.7 对话框12.7.1 消息框from tkinter import messagebox # 信息提示 messagebox.showinfo(标题, 这是一条信息) # 警告 messagebox.showwarning(标题, 这是一条警告) # 错误 messagebox.showerror(标题, 发生错误) # 询问返回 yes 或 no result messagebox.askyesno(确认, 确定要删除吗) if result: print(用户确认) else: print(用户取消) # 选择返回 ok 或 cancel result messagebox.askokcancel(确认, 确定要继续吗)12.7.2 文件选择对话框from tkinter import filedialog # 选择文件打开 filename filedialog.askopenfilename( title选择文件, filetypes[(文本文件, *.txt), (所有文件, *.*)] ) # 选择文件保存 filename filedialog.asksaveasfilename( title保存文件, defaultextension.txt, filetypes[(文本文件, *.txt), (所有文件, *.*)] ) # 选择目录 dirname filedialog.askdirectory(title选择目录)12.7.3 颜色选择对话框from tkinter import colorchooser color colorchooser.askcolor(title选择颜色) # 返回 ((r, g, b), #rrggbb) 或 None if color: print(color[1]) # #ff0000

相关新闻

最新新闻

台式手动锡膏印刷机:精密电子制造的关键工艺装备

台式手动锡膏印刷机:精密电子制造的关键工艺装备

引言 在现代电子制造领域,表面贴装技术(SMT)已成为主流的组装方式。作为SMT生产线中的关键工序,锡膏印刷的质量直接影响后续焊接的可靠性和产品的最终性能。台式手动锡膏印刷机凭借其结构简单、操作灵活、性价比高等特点,在科研实验、小批量生…

2026/8/25 22:40:12
为什么越来越多的人使用FastAPI?

为什么越来越多的人使用FastAPI?

最近这几年,Python在AI和数据处理领域如日中天,很多Java开发者也开始接触Python生态。 在Python的众多Web框架中,FastAPI的崛起速度让人瞠目结舌。 GitHub上,FastAPI已经斩获了80K Star,增长速度超过了Flask和Django…

2026/8/25 22:40:12
AI深度系列(3)| 从RNN到LSTM:序列数据处理的技术逻辑与企业AI化转型启示

AI深度系列(3)| 从RNN到LSTM:序列数据处理的技术逻辑与企业AI化转型启示

在企业AI化转型过程中,大量业务数据以序列形式存在:设备运行日志、用户行为轨迹、语音文本、金融时序等。如何让机器理解这类前后关联的数据,是智能化落地的核心问题之一。本文从技术原理出发,介绍循环神经网络(RNN&am…

2026/8/25 22:40:12
逆向建模关键技术深度解析

逆向建模关键技术深度解析

三维扫描逆向建模关键技术深度解析:从点云到CAD的"幕后"逆向建模、点云处理、点云配准、网格修复、NURBS曲面拟合、特征识别、CAD重建、参数化逆向建模听起来"一键搞定",但真要做出高质量的CAD模型,背后有相当多的技术细…

2026/8/25 22:40:12
乌鲁木齐丰富课程技校经验分享

乌鲁木齐丰富课程技校经验分享

在乌鲁木齐,有一些技工学校以丰富多样的课程吸引着众多学子。其中【乌鲁木齐消防技术培训高级技工学校】和乌鲁木齐市中科高级技工学校都各有特色。课程丰富度对比【乌鲁木齐消防技术培训高级技工学校】专注于消防相关专业课程,涵盖消防燃烧学、消防法、…

2026/8/25 22:40:12
AI搜索引擎优化中的实体对齐是什么?拆解概念、价值与落地路径

AI搜索引擎优化中的实体对齐是什么?拆解概念、价值与落地路径

AI搜索引擎优化中的实体对齐是什么?拆解概念、价值与落地路径 随着生成式大模型普及,AI搜索引擎优化逐步成为数字内容运营的重要工作。很多从业者接触GEO生成式引擎优化的过程中,会频繁看到实体对齐这个专业术语,但多数人只停留在…

2026/8/25 22:35:12