尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python 多继承 MRO、Pillow 与 Tkinter 模块详解

Python 多继承 MRO、Pillow 与 Tkinter 模块详解 1. Python 多继承与 MRO方法解析顺序在 Python 中一个类可以继承自多个父类这就是多继承。当多个父类中存在同名方法或属性时Python 需要一套规则来决定调用哪一个这套规则就是方法解析顺序Method Resolution Order, MRO。1.1 MRO 的计算规则Python 3 统一使用C3 线性化算法来计算 MRO。其核心原则是子类优先于父类多个父类按定义顺序从左到右保持单调性如果一个类在 MRO 中出现在另一个类之前那么在其所有子类的 MRO 中也应保持这个顺序1.2 查看 MRO可以通过类的__mro__属性或mro()方法查看class A: pass class B(A): pass class C(A): pass class D(B, C): pass print(D.mro) 输出(class main.D, class main.B, class main.C, class main.A, class object)1.3 菱形继承问题经典菱形继承结构class A: def show(self): print(A) class B(A): def show(self): print(B) super().show() class C(A): def show(self): print(C) super().show() class D(B, C): def show(self): print(D) super().show() d D() d.show() 输出 D B C A按照 MROD → B → C → A → objectsuper()会沿着这个顺序调用确保了每个类的方法只被调用一次。2. Pillow 图像处理模块Pillow 是 Python 中最流行的图像处理库是 PILPython Imaging Library的友好分支。它支持多种图像格式的打开、操作和保存。2.1 安装与基本使用# 安装 # pip install Pillow from PIL import Image 打开图像 img Image.open(example.jpg) 查看图像信息 print(img.format) # 格式 print(img.size) # 尺寸 (宽, 高) print(img.mode) # 模式 (RGB, RGBA, L 等) 显示图像需要系统支持 img.show() 保存图像 img.save(output.png)2.2 常用图像操作# 调整大小 resized img.resize((300, 200)) 旋转 rotated img.rotate(45) 裁剪 box (100, 100, 400, 300) # 左, 上, 右, 下 cropped img.crop(box) 转换模式 gray_img img.convert(L) # 转为灰度图 滤镜 from PIL import ImageFilter blurred img.filter(ImageFilter.BLUR)2.3 图像绘制与文字添加from PIL import ImageDraw, ImageFont 创建绘制对象 draw ImageDraw.Draw(img) 绘制矩形 draw.rectangle([(50, 50), (200, 150)], outlinered, width3) 添加文字需要字体文件 try: font ImageFont.truetype(arial.ttf, 30) except: font ImageFont.load_default() draw.text((100, 100), Hello Pillow, fillblue, fontfont)3. Tkinter GUI 编程模块Tkinter 是 Python 的标准 GUI 库基于 Tk GUI 工具包可以快速创建桌面应用程序。3.1 基本窗口创建import tkinter as tk from tkinter import ttk 创建主窗口 root tk.Tk() root.title(Tkinter 示例) root.geometry(400x300) # 宽x高 运行主循环 root.mainloop()3.2 常用控件# 标签 label tk.Label(root, text用户名:) label.pack() 输入框 entry tk.Entry(root) entry.pack() 按钮 def on_click(): print(按钮被点击了) button tk.Button(root, text点击我, commandon_click) button.pack() 复选框 check_var tk.IntVar() check tk.Checkbutton(root, text同意协议, variablecheck_var) check.pack() 列表框 listbox tk.Listbox(root) for item in [Python, Java, C, JavaScript]: listbox.insert(tk.END, item) listbox.pack()3.3 布局管理Tkinter 有三种布局管理器pack()简单堆叠grid()网格布局place()绝对位置# pack 示例 label1 tk.Label(root, text标签1, bgred) label1.pack(sideleft, filly) label2 tk.Label(root, text标签2, bgblue) label2.pack(sidetop, fillx) grid 示例 label3 tk.Label(root, text行0列0) label3.grid(row0, column0) label4 tk.Label(root, text行0列1) label4.grid(row0, column1) place 示例 label5 tk.Label(root, text绝对位置) label5.place(x100, y50)3.4 事件绑定def on_key(event): print(f按下了: {event.char}) def on_mouse(event): print(f鼠标位置: ({event.x}, {event.y})) 绑定键盘事件 root.bind(Key, on_key) 绑定鼠标事件 root.bind(Button-1, on_mouse) # 左键点击4. 综合示例图像查看器结合 Pillow 和 Tkinter 创建一个简单的图像查看器import tkinter as tk from tkinter import filedialog from PIL import Image, ImageTk class ImageViewer: def init(self, root): self.root root self.root.title(图像查看器) # 创建菜单 menubar tk.Menu(root) filemenu tk.Menu(menubar, tearoff0) filemenu.add_command(label打开, commandself.open_image) filemenu.add_separator() filemenu.add_command(label退出, commandroot.quit) menubar.add_cascade(label文件, menufilemenu) root.config(menumenubar) # 创建标签显示图像 self.label tk.Label(root) self.label.pack() def open_image(self): filepath filedialog.askopenfilename( filetypes[(图像文件, *.jpg *.jpeg *.png *.gif *.bmp)] ) if filepath: # 使用 Pillow 打开图像 img Image.open(filepath) img.thumbnail((800, 600)) # 缩略图 # 转换为 Tkinter 可显示的格式 photo ImageTk.PhotoImage(img) # 更新标签 self.label.config(imagephoto) self.label.image photo # 保持引用 if name main: root tk.Tk() app ImageViewer(root) root.mainloop()5. 总结MRO理解 Python 多继承的方法解析顺序掌握super()在菱形继承中的调用链Pillow掌握图像的基本打开、保存、转换、裁剪、滤镜和绘制操作Tkinter掌握窗口创建、控件使用、布局管理和事件绑定能够创建简单的 GUI 应用综合应用结合 Pillow 和 Tkinter 可以创建实用的图像处理工具这三个主题分别代表了 Python 在面向对象、图像处理和 GUI 编程方面的重要能力掌握它们能够大大扩展 Python 的应用场景。
返回列表