Python を使った QR コード生成ツール

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、Python を使って QR コードジェネレータを作成するプロセスを案内します。プロジェクトファイルを作成し、必要なライブラリをインポートし、QR コード生成関数を定義し、QR コード保存関数を定義し、QR コードジェネレータインターフェイス用のメインウィンドウと要素を作成し、メイン関数を実行する方法を学びます。

👀 プレビュー

QR コードジェネレータインターフェイスのプレビュー

🎯 タスク

このプロジェクトでは、以下を学びます。

  • Python を使って QR コードジェネレータを作成する方法
  • qrcodetkinterPILなどのライブラリをインポートする方法
  • QR コードを生成および保存する関数を定義する方法
  • QR コードを生成および保存するためのユーザーインターフェイスを作成する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • qrcodeライブラリを使って QR コードを生成する
  • tkinterライブラリを使ってグラフィカルユーザーインターフェイスを作成する
  • 生成した QR コードをファイルに保存する
  • 生成した QR コードをキャンバスに表示する

プロジェクトファイルを作成する

まず、qr_code_generator.py という名前の新しいファイルを作成し、好きなコードエディタで開きます。

cd ~/project
touch qr_code_generator.py
✨ 解答を確認して練習

必要なライブラリをインポートする

qr_code_generator.py ファイルで、コードの最初に以下のライブラリをインポートします。

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

必要なライブラリを以下のコマンドを使ってインストールします。

pip3 install qrcode pillow
✨ 解答を確認して練習

QR コード生成関数を定義する

次のコードを追加して、generate_qr という関数を定義します。この関数は、テキストパラメータを受け取り、QR コード画像を生成します。

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

上記では、qrcode ライブラリを使って QR コード画像を生成しています。generate_qr 関数は、テキストパラメータを受け取り、これは QR コードに含まれるテキストまたは URL です。その後、関数は指定されたバージョン、誤り訂正レベル、ボックスサイズ、およびボーダーで QR コードオブジェクトを作成します。次に、テキストを QR コードオブジェクトに追加し、QR コード画像を生成して qr_code.png という名前のファイルに保存します。最後に、関数は生成された QR コード画像のファイル名を返します。

✨ 解答を確認して練習

QR コード保存関数を定義する

次に、生成された QR コードを保存するための関数である save_qr を定義するために、以下のコードを追加します。

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

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

この関数は、生成された QR コード画像のファイル名を引数として受け取ります。そして、関数はファイルダイアログボックスを開き、ユーザーに QR コード画像を保存する場所とファイル名を選択させます。ユーザーが場所とファイル名を選択した場合、関数は生成された QR コード画像の名前を選択されたファイル名に変更し、QR コードが保存されたことを知らせるメッセージボックスを表示します。

✨ 解答を確認して練習

メインウィンドウと要素を作成する

次に、QR コード生成インターフェイスに必要なメインウィンドウ、ラベル、入力フィールド、キャンバス、およびボタンを作成するための create_window という関数を定義するために、以下のコードを追加します。

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()

私たちは、tkinter ラベルを使用してメインウィンドウ、ラベル、入力フィールド、キャンバス、およびボタンを作成します。create_window 関数は、メインウィンドウを作成し、QR コードに含まれるテキストまたは URL を入力するためのラベルと入力フィールドを追加します。この関数はまた、生成された QR コード画像を表示するために使用されるキャンバスも作成します。その後、この関数は generate_and_display というネストされた関数を定義します。この関数は、入力フィールドからテキストを取得し、QR コード画像を生成し、キャンバス上に QR コード画像を表示します。この関数はまた、生成された QR コード画像を保存するためのボタンも作成します。最後に、この関数はクリックされたときに generate_and_display 関数を呼び出すボタンを作成します。

✨ 解答を確認して練習

メイン関数を実行する

最後に、ファイルを実行したときに create_window 関数を実行するために、以下のコードを追加します。

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

if __name__ == '__main__' ブロックは、ファイルが実行されたときにのみ create_window 関数が実行され、モジュールとしてインポートされたときには実行されないことを保証します。このブロックはまた、generate_qr 関数を呼び出して、「Hello World!」というテキストで QR コード画像を生成します。

python qr_code_generator.py
QR code generation output
✨ 解答を確認して練習

まとめ

あなたは Python を使って QR コード生成ツールを成功裏に作成しました。この手順に従ったことで、プロジェクトファイルを作成する方法、必要なライブラリをインポートする方法、QR コードの生成と保存のための関数を定義する方法、Tkinter を使ったユーザーインターフェイスを作成する方法、および QR コードを生成して表示するためにプロジェクトを実行する方法を学びました。