Gerador de QR Code com Python

PythonBeginner
Pratique Agora

Introdução

Este projeto irá guiá-lo através do processo de criação de um gerador de Código QR usando Python. Você aprenderá como criar um arquivo de projeto, importar as bibliotecas necessárias, definir a função de geração de Código QR, definir a função de salvamento de Código QR, criar a janela principal e os elementos para a interface do gerador de Código QR e executar a função principal.

👀 Pré-visualização

QR Code generator interface preview

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como criar um gerador de Código QR usando Python
  • Como importar bibliotecas como qrcode, tkinter e PIL
  • Como definir funções para gerar e salvar Códigos QR
  • Como criar uma interface de usuário para gerar e salvar Códigos QR

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Usar a biblioteca qrcode para gerar Códigos QR
  • Usar a biblioteca tkinter para criar uma interface gráfica de usuário
  • Salvar Códigos QR gerados em arquivos
  • Exibir Códigos QR gerados em uma tela (canvas)

Criar os arquivos do projeto

Para começar, crie um novo arquivo chamado qr_code_generator.py e abra-o no seu editor de código preferido.

cd ~/project
touch qr_code_generator.py
✨ Verificar Solução e Praticar

Importar as bibliotecas necessárias

No arquivo qr_code_generator.py, importe as seguintes bibliotecas no início do seu código:

import qrcode
import tkinter as tk
from tkinter import messagebox, filedialog
from PIL import ImageTk, Image
import os

Instale as bibliotecas necessárias usando o seguinte comando:

pip3 install qrcode pillow
✨ Verificar Solução e Praticar

Definir a função de geração de QR Code

Adicione o seguinte código para definir uma função chamada generate_qr, que recebe um parâmetro de texto e gera uma imagem de QR Code:

def generate_qr(text):
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=10,
        border=4,
    )
    qr.add_data(text)
    qr.make(fit=True)

    img = qr.make_image(fill='black', back_color='white')
    filename = 'qr_code.png'
    img.save(filename)
    return filename

Acima, usamos a biblioteca qrcode para gerar uma imagem de QR Code. A função generate_qr recebe um parâmetro de texto, que é o texto ou URL que o QR Code conterá. A função então cria um objeto QR Code com a versão especificada, nível de correção de erro, tamanho da caixa e borda. O texto é então adicionado ao objeto QR Code, e a imagem do QR Code é gerada e salva em um arquivo chamado qr_code.png. Finalmente, a função retorna o nome do arquivo da imagem do QR Code gerada.

✨ Verificar Solução e Praticar

Definir a função de salvamento do QR Code

Em seguida, adicione o seguinte código para definir uma função chamada save_qr, que permite ao usuário salvar o QR Code gerado:

def save_qr(filename):
    filepath = filedialog.asksaveasfilename(defaultextension='.png', filetypes=[('PNG Images', '*.png')])

    if filepath:
        os.rename(filename, filepath)
        messagebox.showinfo('QR Code Saved!')

A função recebe um parâmetro de nome de arquivo (filename), que é o nome do arquivo da imagem do QR Code gerada. A função então abre uma caixa de diálogo de arquivo, que permite ao usuário selecionar um local e nome de arquivo para salvar a imagem do QR Code. Se o usuário selecionar um local e nome de arquivo, a função renomeia a imagem do QR Code gerada para o nome de arquivo selecionado e exibe uma caixa de mensagem para informar ao usuário que o QR Code foi salvo.

✨ Verificar Solução e Praticar

Criar a janela principal e os elementos

Agora, adicione o seguinte código para definir uma função chamada create_window, que cria a janela principal, rótulos, campo de entrada, tela (canvas) e botões necessários para a interface do gerador de QR Code:

def create_window():
    window = tk.Tk()
    window.title('QR Code Generator')

    label = tk.Label(window, text='Enter the text/URL:')
    label.pack()

    ent = tk.Entry(window)
    ent.pack()

    canvas = tk.Canvas(window, width=200, height=200)
    canvas.pack()

    def generate_and_display():
        text = ent.get()
        filename = generate_qr(text)
        photo = ImageTk.PhotoImage(Image.open(filename))
        canvas.create_image(100, 100, image=photo)
        button2 = tk.Button(window, text='Save QR Code', command=lambda: save_qr(filename))
        button2.pack()
        window.mainloop()

    button = tk.Button(window, text='Generate QR Code', command=generate_and_display)
    button.pack()

    window.mainloop()

Usamos a biblioteca tkinter para criar a janela principal, rótulos, campo de entrada, tela (canvas) e botões. A função create_window cria a janela principal e adiciona um rótulo e um campo de entrada para o usuário inserir o texto ou URL que o QR Code conterá. A função também cria uma tela (canvas), que será usada para exibir a imagem do QR Code gerada. A função então define uma função aninhada chamada generate_and_display, que obtém o texto do campo de entrada, gera uma imagem de QR Code e exibe a imagem do QR Code na tela (canvas). A função também cria um botão que permite ao usuário salvar a imagem do QR Code gerada. Finalmente, a função cria um botão que chama a função generate_and_display quando clicado.

✨ Verificar Solução e Praticar

Executar a função principal

Finalmente, adicione o seguinte código para executar a função create_window quando o arquivo for executado:

if __name__ == '__main__':
    create_window()
    generate_qr('Hello World!')

O bloco if __name__ == '__main__' garante que a função create_window seja executada apenas quando o arquivo for executado, e não quando for importado como um módulo. O bloco também chama a função generate_qr para gerar uma imagem de QR Code com o texto "Hello World!".

python qr_code_generator.py
QR code generation output
✨ Verificar Solução e Praticar

Resumo

Você criou com sucesso um gerador de QR Code usando Python. Ao seguir este projeto passo a passo, você aprendeu como criar um arquivo de projeto, importar as bibliotecas necessárias, definir funções para geração e salvamento de QR Code, criar uma interface de usuário com Tkinter e executar o projeto para gerar e exibir QR Codes.