You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为生成的二维码文件添加序号以避免重名报错?

解决二维码生成工具的文件重名问题

核心修改方案

要实现自动生成带序号的文件名,需先检查目标目录下的现有文件,提取并计算最大序号,再生成下一个可用的文件名。同时修正原代码中Tkinter的逻辑错误,确保能正确获取输入内容并触发生成操作。

修改后的完整代码

import qrcode
import tkinter as tk
from tkinter import messagebox
import os
import shutil
from sys import exit

def get_unique_filename(dst_dir, base_name="output", ext=".png"):
    """生成目标目录下不重复的文件名"""
    max_num = 0
    # 遍历目录,提取符合命名规则的文件序号
    for filename in os.listdir(dst_dir):
        if filename.startswith(base_name) and filename.endswith(ext):
            num_part = filename[len(base_name):-len(ext)]
            if num_part.isdigit():
                num = int(num_part)
                if num > max_num:
                    max_num = num
    # 生成新文件名
    if max_num == 0:
        return f"{base_name}{ext}"
    else:
        return f"{base_name}{max_num + 1}{ext}"

def generate_qr_code():
    """生成并保存二维码的按钮回调函数"""
    data = entry_1.get().strip()
    if not data:
        messagebox.showwarning("提示", "请输入二维码内容!")
        return

    # 二维码配置与生成
    qr = qrcode.QRCode(
        version=1,
        box_size=5,
        border=5
    )
    qr.add_data(data)
    qr.make(fit=True)
    img = qr.make_image(fill_color='black', back_color='white')

    # 定义目标目录
    dst_dir = r"D:\Users"
    # 获取不重复文件名
    unique_filename = get_unique_filename(dst_dir)
    temp_path = f"./{unique_filename}"
    img.save(temp_path)

    # 移动文件到目标目录
    dst_path = os.path.join(dst_dir, unique_filename)
    shutil.move(temp_path, dst_path)
    messagebox.showinfo("成功", f"二维码已保存为:{dst_path}")

# 初始化Tkinter界面
root = tk.Tk()
root.title('二维码生成工具')
root.geometry("400x200+50+50")
try:
    root.iconbitmap('QRCODE-GENERATOR.ico')
except:
    pass  # 图标文件不存在时跳过,不影响核心功能
root.configure(bg="grey")

# 界面元素布局
lbl_1 = tk.Label(root, text="输入二维码内容:", bg="grey", font=("Arial", 10))
entry_1 = tk.Entry(root, width=30)
generate_btn = tk.Button(root, text="生成二维码", command=generate_qr_code)

lbl_1.pack(pady=10)
entry_1.pack(pady=5)
generate_btn.pack(pady=15)

root.mainloop()

关键代码说明

  1. get_unique_filename函数:

    • 遍历目标目录,识别output开头、.png结尾的文件
    • 提取文件名中的数字序号,计算最大序号后加1,生成新文件名
    • 若目录无同名文件,直接使用output.png
  2. Tkinter逻辑修正:

    • 将二维码生成逻辑封装为按钮点击的回调函数,确保GUI运行时能响应操作
    • 使用entry_1.get()获取输入框的实际内容,而非直接赋值控件对象
    • 增加输入为空的判断,弹出提示避免无效操作
  3. 文件流程优化:

    • 先在当前目录生成临时文件,再移动到目标目录
    • 使用os.path.join拼接路径,避免跨平台路径格式问题

内容的提问来源于stack exchange,提问作者Rayaan Study

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:15:35