Create a QR Scanner using Python3
2 min readFeb 1, 2023
import cv2
import pyzbar.pyzbar as pyzbar
import threading
import tkinter as tk
import numpy as np
from PIL import Image, ImageTk
from tkinter import messagebox, scrolledtext
import re
def read_qr_code():
# membaca frame dari webcam
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
# mencari dan mengambil data dari QR code
decoded_objs = pyzbar.decode(frame)
for obj in decoded_objs:
data = obj.data.decode('utf-8')
break
else:
data = ''
# mengkonversi frame ke format yang dapat diterima oleh tkinter
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frame = Image.fromarray(frame)
frame = ImageTk.PhotoImage(frame)
# menampilkan hasil dari QR code pada label dan gambar
text.delete(1.0, tk.END)
text.insert(tk.INSERT, data)
label2.config(image=frame)
label2.image = frame
# mengakhiri loop jika tombol stop ditekan
if stop_flag.is_set():
break
# menutup kamera
cap.release()
def start_reading():
# memulai thread baru untuk membaca QR code
t = threading.Thread(target=read_qr_code)
t.start()
def stop_reading():
# mengatur stop flag untuk mengakhiri loop pembacaan QR code
stop_flag.set()
def copy_result():
# menyimpan hasil scan ke clipboard
result = text.get(1.0, tk.END)
root.clipboard_clear()
root.clipboard_append(result)
messagebox.showinfo("Information", "Result has been copied to clipboard.")
# membuat GUI menggunakan tkinter
root = tk.Tk()
root.title("QR Code Reader")
frame = tk.Frame(root)
frame.pack(pady=10)
text = scrolledtext.ScrolledText(frame, height=5)
text.pack()
label2 = tk.Label(frame)
label2.pack()
frame2 = tk.Frame(root)
frame2.pack()
tk.Button(frame2, text="Start", command=start_reading).pack(side=tk.LEFT, padx=5)
tk.Button(frame2, text="Stop", command=stop_reading).pack(side=tk.LEFT, padx=5)
tk.Button(frame2, text="Copy", command=copy_result).pack(side=tk.LEFT, padx=5)
root.mainloop()
example result of application