import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import qrcode
from pyzbar.pyzbar import decode
import os
# ----------------------------------------
# MAIN APP
# ----------------------------------------
class BarcodeQRApp:
def __init__(self, root):
self.root = root
self.root.title("Offline Barcode & QR Suite")
self.root.geometry("520x520")
self.build_ui()
def build_ui(self):
tk.Label(self.root, text="Barcode & QR Generator / Reader",
font=("Arial", 16, "bold")).pack(pady=10)
self.text_entry = tk.Entry(self.root, width=45)
self.text_entry.pack(pady=5)
self.text_entry.insert(0, "Enter text or URL")
tk.Button(self.root, text="Generate QR Code",
command=self.generate_qr).pack(pady=5)
tk.Button(self.root, text="Read QR / Barcode from Image",
command=self.read_code).pack(pady=5)
self.image_label = tk.Label(self.root)
self.image_label.pack(pady=10)
self.result_label = tk.Label(self.root, text="", wraplength=480)
self.result_label.pack(pady=10)
# ----------------------------------------
# Generate QR
# ----------------------------------------
def generate_qr(self):
text = self.text_entry.get().strip()
if not text:
messagebox.showerror("Error", "Enter some text!")
return
qr = qrcode.make(text)
file = filedialog.asksaveasfilename(
defaultextension=".png",
filetypes=[("PNG Image", "*.png")]
)
if file:
qr.save(file)
self.display_image(file)
messagebox.showinfo("Saved", f"QR saved at:\n{file}")
# ----------------------------------------
# Read QR / Barcode
# ----------------------------------------
def read_code(self):
file = filedialog.askopenfilename(
filetypes=[("Image Files", "*.png *.jpg *.jpeg")]
)
if not file:
return
img = Image.open(file)
self.display_image(file)
decoded = decode(img)
if not decoded:
self.result_label.config(text=" No QR or Barcode detected.")
return
result_text = ""
for d in decoded:
result_text += f"""
Type: {d.type}
Data: {d.data.decode('utf-8')}
---------------------
"""
self.result_label.config(text=result_text)
# ----------------------------------------
# Display image
# ----------------------------------------
def display_image(self, path):
img = Image.open(path)
img.thumbnail((250, 250))
self.tk_img = ImageTk.PhotoImage(img)
self.image_label.config(image=self.tk_img)
# ----------------------------------------
# RUN
# ----------------------------------------
if __name__ == "__main__":
root = tk.Tk()
app = BarcodeQRApp(root)
root.mainloop()
No comments:
Post a Comment