使用 VSCode + Copilot 生成的一个小工具,记录下来帮助自己理解 Python第一个 Python 程序

环境

Pillow

图像处理库,替代 PIL 兼容 Python3 并持续维护。

作用

  • 图像处理:支持打开、编辑、保存多种图像格式(如 JPEG、PNG、GIF、BMP 等)。

  • 基础操作:裁剪、旋转、缩放、滤镜、调色、绘制图形等。

  • 高级功能:文字渲染、图像合成、通道操作、直方图分析等。

安装

pip install pillow

PyInstaller

Python 打包工具,可以将程序打包成独立可执行文件(.exe .appLinux 二进制文件)。让 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)  # 设置窗口