Skip to content

Commit efbb7af

Browse files
authored
Bulk QR Generator
1 parent 251d521 commit efbb7af

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed

BulkQR.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
import tkinter as tk
2+
from tkinter import filedialog, messagebox
3+
import qrcode
4+
import zipfile
5+
import os
6+
import shutil
7+
from PIL import Image
8+
9+
class ShowFileDialog(tk.Toplevel):
10+
def __init__(self, master, file_path):
11+
super().__init__(master)
12+
self.title("Show File in Explorer")
13+
self.geometry("300x100")
14+
self.file_path = file_path
15+
16+
label = tk.Label(self, text="Do you want to show the file in Explorer?")
17+
label.pack(pady=10)
18+
19+
button_frame = tk.Frame(self)
20+
button_frame.pack()
21+
22+
yes_button = tk.Button(button_frame, text="Yes", command=self.show_in_explorer)
23+
yes_button.pack(side=tk.LEFT, padx=10)
24+
25+
no_button = tk.Button(button_frame, text="No", command=self.destroy)
26+
no_button.pack(side=tk.LEFT)
27+
28+
def show_in_explorer(self):
29+
folder_path = os.path.dirname(self.file_path)
30+
if os.path.exists(folder_path):
31+
os.startfile(folder_path)
32+
self.destroy()
33+
else:
34+
messagebox.showerror("Error", "Folder not found.")
35+
self.destroy()
36+
37+
class QRCodeGenerator:
38+
def __init__(self, master):
39+
self.master = master
40+
master.title("Free Bulk QR Code Generator 1.0 - By @Deadpool2000")
41+
42+
self.file_label = tk.Label(master, text="List for QR (txt):")
43+
self.file_label.grid(row=0, column=0, padx=5, pady=5, sticky="e")
44+
self.file_entry = tk.Entry(master, width=50)
45+
self.file_entry.grid(row=0, column=1, padx=5, pady=5)
46+
self.browse_file_button = tk.Button(master, text="Browse", command=self.browse_file)
47+
self.browse_file_button.grid(row=0, column=2, padx=5, pady=5)
48+
49+
self.textfile2_label = tk.Label(master, text="Name File (txt):")
50+
self.textfile2_label.grid(row=1, column=0, padx=5, pady=5, sticky="e")
51+
self.textfile2_entry = tk.Entry(master, width=50)
52+
self.textfile2_entry.grid(row=1, column=1, padx=5, pady=5)
53+
self.browse_textfile2_button = tk.Button(master, text="Browse", command=self.browse_textfile2)
54+
self.browse_textfile2_button.grid(row=1, column=2, padx=5, pady=5)
55+
56+
self.resolution_label = tk.Label(master, text="QR Resolution (pixels):")
57+
self.resolution_label.grid(row=2, column=0, padx=5, pady=5, sticky="e")
58+
self.resolution_entry = tk.Entry(master, width=50)
59+
self.resolution_entry.grid(row=2, column=1, padx=5, pady=5)
60+
61+
self.generate_button = tk.Button(master, text="Generate QR Codes", command=self.generate_qr_codes)
62+
self.generate_button.grid(row=3, column=1, padx=5, pady=10)
63+
64+
self.result_label = tk.Label(master, text="")
65+
self.result_label.grid(row=4, column=1, padx=5, pady=5)
66+
67+
# Disable maximize button and set window size
68+
master.resizable(False, False)
69+
master.geometry("520x150")
70+
71+
def browse_file(self):
72+
filename = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
73+
self.file_entry.delete(0, tk.END)
74+
self.file_entry.insert(0, filename)
75+
76+
def browse_textfile2(self):
77+
filename = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
78+
self.textfile2_entry.delete(0, tk.END)
79+
self.textfile2_entry.insert(0, filename)
80+
81+
def generate_qr_codes(self):
82+
file_path = self.file_entry.get()
83+
textfile2_path = self.textfile2_entry.get()
84+
resolution = self.resolution_entry.get()
85+
86+
if not os.path.exists(file_path):
87+
self.result_label.config(text="File list for QR not found.")
88+
return
89+
if not os.path.exists(textfile2_path):
90+
textfile2_path = file_path
91+
temp_dir = 'temp'
92+
os.makedirs(temp_dir, exist_ok=True)
93+
filename_set = set()
94+
with open(file_path, 'r') as file, open(textfile2_path, 'r') as textfile2:
95+
for record, filename in zip(file, textfile2):
96+
record = record.strip()
97+
filename = filename.strip()
98+
file_index = 1
99+
new_filename = f"{filename}.png"
100+
while new_filename in filename_set:
101+
new_filename = f"{filename}_{file_index}.png"
102+
file_index += 1
103+
qr = qrcode.QRCode(version=None, box_size=10, border=4)
104+
qr.add_data(record)
105+
qr.make(fit=True)
106+
img = qr.make_image(fill_color="black", back_color="white").resize((int(resolution), int(resolution)),
107+
Image.BILINEAR)
108+
filename_set.add(new_filename)
109+
filename = f"{temp_dir}/{new_filename}"
110+
img.save(filename, format='PNG')
111+
112+
zip_filename = f"{os.path.splitext(textfile2_path)[0]}.zip"
113+
with zipfile.ZipFile(zip_filename, 'w') as zip_file:
114+
for filename in os.listdir(temp_dir):
115+
zip_file.write(f"{temp_dir}/{filename}", arcname=filename)
116+
shutil.rmtree(f'{temp_dir}')
117+
self.show_success_message(zip_filename)
118+
119+
def show_success_message(self, zip_filename):
120+
message = "QR Codes generated successfully. Do you want to show the file in Explorer?"
121+
if messagebox.askyesno("Success", message):
122+
ShowFileDialog(self.master, zip_filename)
123+
124+
125+
def main():
126+
root = tk.Tk()
127+
app = QRCodeGenerator(root)
128+
root.mainloop()
129+
130+
131+
if __name__ == "__main__":
132+
main()

0 commit comments

Comments
 (0)