In this video I’ll show you how to decode QR Codes with Tkinter and Python.
In the last video we created QR codes, in this video I’ll show you how to open a QR Code and figure out what it says.
We’ll use pyzbar to do most of the heavy lifting on this one.
Python Code: decode_qr.py
(Github Code)
from tkinter import *
import pyqrcode
import png
from tkinter import filedialog
from PIL import Image, ImageTk
from pyzbar.pyzbar import decode
root = Tk()
root.title("QR Code Generator")
root.iconbitmap('c:/tkinter.com/codemy.ico')
root.geometry('500x550')
def create_code():
#File Dialog
input_path = filedialog.asksaveasfilename(title="Save Image",
filetyp=(("PNG File", ".png"), ("All Files", "*.*")))
if input_path:
if input_path.endswith(".png"):
# Create QR Code from entry box
get_code = pyqrcode.create(my_entry.get())
# Save as PNG File
get_code.png(input_path, scale=5)
else:
# Add that .png to the end of the file name
input_path = f'{input_path}.png'
# Create QR Code from entry box
get_code = pyqrcode.create(my_entry.get())
# Save as PNG File
get_code.png(input_path, scale=5)
# Put QR code on screen
global get_image
get_image = ImageTk.PhotoImage(Image.open(input_path))
# Add image to label
my_label.config(image=get_image)
# Delete entry box
my_entry.delete(0, END)
# Flash up a finished message
my_entry.insert(0, "Finished!")
def clear_all():
my_entry.delete(0, END)
my_label.config(image='')
# Decode QR Code
def decode_it():
# Open a qr code image
#File Dialog
input_path = filedialog.askopenfilename(title="Open Image",
filetyp=(("PNG File", ".png"), ("All Files", "*.*")))
if input_path:
# Put QR code on screen
global get_image
get_image = ImageTk.PhotoImage(Image.open(input_path))
# Add image to label
my_label.config(image=get_image)
# Decode QR Code
decode_QR = decode(Image.open(input_path))
#print(decode_QR)
result_label.config(text=f"QR Decoded: {decode_QR[0].data.decode('ascii')}")
# Delete entry box
my_entry.delete(0, END)
# Flash up a finished message
my_entry.insert(0, "Finished!")
# Create GUI
my_entry = Entry(root, font=("Helvetica", 18))
my_entry.pack(pady=20)
my_button = Button(root, text="Create QR Code", command=create_code)
my_button.pack(pady=20)
my_button2 = Button(root, text="Clear", command=clear_all)
my_button2.pack()
my_label = Label(root, text='')
my_label.pack(pady=20)
result_label = Label(root, text='')
result_label.pack(pady=20)
result_button = Button(root, text="Decode QR Code", command=decode_it)
result_button.pack(pady=20)
root.mainloop()

Add comment