如何为生成的二维码文件添加序号以避免重名报错?
解决二维码生成工具的文件重名问题
核心修改方案
要实现自动生成带序号的文件名,需先检查目标目录下的现有文件,提取并计算最大序号,再生成下一个可用的文件名。同时修正原代码中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()
关键代码说明
get_unique_filename函数:- 遍历目标目录,识别
output开头、.png结尾的文件 - 提取文件名中的数字序号,计算最大序号后加1,生成新文件名
- 若目录无同名文件,直接使用
output.png
- 遍历目标目录,识别
Tkinter逻辑修正:
- 将二维码生成逻辑封装为按钮点击的回调函数,确保GUI运行时能响应操作
- 使用
entry_1.get()获取输入框的实际内容,而非直接赋值控件对象 - 增加输入为空的判断,弹出提示避免无效操作
文件流程优化:
- 先在当前目录生成临时文件,再移动到目标目录
- 使用
os.path.join拼接路径,避免跨平台路径格式问题
内容的提问来源于stack exchange,提问作者Rayaan Study
相关产品推荐
相关产品推荐

