使用
VSCode
+Copilot
生成的一个小工具,记录下来帮助自己理解Python
(第一个Python
程序)
环境
Pillow
图像处理库,替代 PIL
兼容 Python3
并持续维护。
作用
图像处理:支持打开、编辑、保存多种图像格式(如 JPEG、PNG、GIF、BMP 等)。
基础操作:裁剪、旋转、缩放、滤镜、调色、绘制图形等。
高级功能:文字渲染、图像合成、通道操作、直方图分析等。
安装
pip install pillow
PyInstaller
Python
打包工具,可以将程序打包成独立可执行文件(.exe
.app
或 Linux
二进制文件)。让 Python
程序在没有安装 Python
环境的电脑上直接运行。
安装
pip install pyinstaller
执行
进入脚本所在目录后,在终端或命令提示符中运行命令:
pyinstaller --onefile --windowed Untitled-1.py
由于我是通过
Microsoft Store
安装的Python
,所以使用python -m
来运行模块
python -m PyInstaller --onefile --windowed Untitled-1.py
知识点
f-string
一种字符串格式化语法。它允许在字符串中直接嵌入变量或表达式。
window.geometry(f"{width}x{height}+{x}+{y}")
除法取整运算
//
对两个数进行除法运算后,向下取整。
布局管理
pack()
:按顺序自动排列(简单但灵活性低)。
#pady 垂直方向外边距
#padx 水平方向外边距
#fill填充父容器剩余控件,可选tk.X tk.Y tk.BOTH
#expand:允许控件扩展以占用额外的空间(当窗口变大时,文本框会随之拉伸)
output_text.pack(pady=10,padx=10, fill=tk.BOTH, expand=True)
grid()
:网格布局(类似表格)。place()
:绝对坐标定位(精确但不灵活)。
Demo
将手动选择的文件夹(包括子文件夹)下所有 BMP
文件另存为 TIFF
。
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image
import os
import threading
def center_window(window, width, height):
# 获取屏幕尺寸
screen_width = window.winfo_screenwidth()
screen_height = window.winfo_screenheight()
# 计算居中坐标 // 表示向下取整运算
x = (screen_width - width) // 2
y = (screen_height - height) // 2
# 设置窗口位置(格式:"宽度x高度+X偏移+Y偏移")
window.geometry(f"{width}x{height}+{x}+{y}")
def convert_bmp_to_tif_in_folder():
# 清空输出提示
output_text.delete(1.0, tk.END)
# 打开文件夹选择对话框
folder_path = filedialog.askdirectory(title="选择包含BMP文件的文件夹")
if not folder_path:
return # 用户取消选择
def convert():
try:
# 遍历文件夹及其子文件夹
for root, _, files in os.walk(folder_path):
for file in files:
if file.lower().endswith(".bmp"):
bmp_path = os.path.join(root, file)
tif_path = os.path.splitext(bmp_path)[0] + ".tif"
# 转换并保存为TIFF格式
with Image.open(bmp_path) as img:
img.save(tif_path, format="TIFF")
# 在界面输出提示
output_text.insert(tk.END, f"已转换文件: {bmp_path}\n")
output_text.see(tk.END) # 滚动到最新提示
messagebox.showinfo("成功", "所有BMP文件已成功转换为TIFF!")
except Exception as e:
messagebox.showerror("错误", f"文件转换失败:{e}")
# 使用线程避免阻塞 UI
threading.Thread(target=convert).start()
# 创建主窗口
root = tk.Tk()
root.title("BMP转TIFF工具")
# 设置窗口大小(可选)
center_window(root, 500, 600) # 设置窗口
评论