QRコード生成ツールをPythonで自作!exeファイルの作成方法

QRコード生成ツールをPythonで自作!exeファイルの作成方法 プログラミング

QRコードは情報を簡単に共有できる便利なツールです。
しかし、オンラインツールやアプリを使う際には、セキュリティ面での懸念があります。

個人情報や機密情報が含まれるQRコードを生成する際をイメージしてみてください。
オンラインツールやアプリを使用すると、情報漏洩のリスクが高まりますよね。

そこで、Pythonを使ってQRコード生成ツールを自作しようということです。
さらにPyinstallerを使ってexeファイルにすることで、セキュリティと利便性を両立させる方法をご紹介します。

必要なライブラリのインストール

QRコードの生成には「segno」、GUIの作成には「tkinter」、画像処理には「PIL(Pillow)」を使用します。
exe化には、Pyinstallerを利用することになります。

  • segno
  • PIL(Pillow)
  • Pyinstaller

最低限で上記をインストールする必要があります。

なお、tkinterはデフォルトで利用可能です。

QRコード生成ツールのプログラム

QRコード生成ツールのコードは、以下。

qr_tool.py

import segno
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk

def create_qr():
    # ユーザー入力を取得
    user_input = text_input.get("1.0", tk.END).strip()
    if user_input:
        # QRコードを生成
        qr = segno.make(user_input, error='H')
        temp_file = "temp_qrcode.png"
        qr.save(temp_file, scale=10, dark='black', light='white')
        # QRコードをリサイズして表示
        image = Image.open(temp_file)
        resized_image = image.resize((250, 250), Image.Resampling.LANCZOS)
        photo = ImageTk.PhotoImage(resized_image)
        label_image.config(image=photo)
        label_image.image = photo  # 参照を保持

def save_qr():
    # ファイル保存ダイアログを開く
    file_path = filedialog.asksaveasfilename(defaultextension='.png',
                                             filetypes=[("PNG files", '*.png')],
                                             title="保存する場所を選択してください")
    if file_path:
        # ファイルを指定した場所に保存
        Image.open("temp_qrcode.png").save(file_path)
        print("QRコードが保存されました:", file_path)

def center_window(root, width=400, height=550):
    # 画面サイズを取得
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    # 画面中央に配置
    x = (screen_width - width) // 2
    y = (screen_height - height) // 2
    root.geometry(f'{width}x{height}+{x}+{y}')

# GUIの設定
root = tk.Tk()
root.title("QRコード生成器")

# ウィンドウサイズと位置の設定
center_window(root)

# テキスト入力用テキストエリア
text_input = tk.Text(root, height=8, width=30)
text_input.pack(pady=10)

# 生成ボタン
button = tk.Button(root, text="QRコードを生成", command=create_qr)
button.pack(pady=5)

# 画像表示用ラベル、サイズを250x250ピクセルに調整
label_image = tk.Label(root, width=250, height=250)
label_image.pack(pady=10)

# 保存ボタン
save_button = tk.Button(root, text="QRコードを保存", command=save_qr)
save_button.pack(pady=5)

# GUIを表示
root.mainloop()

コメントにより、ある程度はわかると思います。
簡単にですが、説明しておきます。

QRコード生成関数の作成

ユーザーが入力したテキストをもとにQRコードを生成し、一時的なファイルとして保存します。
このとき、QRコードのサイズやエラー訂正レベルを指定できます。

GUIの作成

生成したQRコードを表示するためのGUIを作成します。
tkinterを使用して、テキスト入力エリア、生成ボタン、画像表示用ラベル、保存ボタンを配置します。
生成ボタンをクリックすると、QRコードが生成され、画像表示用ラベルに表示されます。

保存機能の実装

保存ボタンをクリックすると、ファイル保存ダイアログが開きます。
生成したQRコードを指定した場所にPNG形式で保存できます。

ウィンドウの設定とツールの起動

GUIのウィンドウサイズと位置を設定します。
そして、メインループを実行してツールを起動します。

exeファイルへの変換

Pyinstallerを使ってPythonスクリプトをexeファイルに変換します。
Pyinstallerをインストールした後、以下のコマンドを実行します。

pyinstaller --onefile --noconsole --icon=qr.ico qr_tool.py

このコマンドにより、単一のexeファイルが生成されます。
–onefile オプションを使用することで、必要なライブラリを含む単一の実行可能ファイルが作成されます。
–noconsole オプションを使用することで、コンソールウィンドウが表示されずにGUIのみが表示されます。

さらに、–icon オプションを使用してアイコンを適用しています。
このアイコンは、ChatGPTを用いてwebp形式の画像を作成し、GIMPでico形式に変換したものです。

exeファイル化のメリットには、以下のようなことがあります。

  1. 簡単な配布:Pythonがインストールされていない環境でも、exeファイルを実行するだけでツールを使用できます。
  2. セキュリティ面での安心感:自分で作成したツールを使うことで、情報漏洩のリスクを最小限に抑えられます。
  3. カスタマイズ性:必要な機能を自由に追加・変更できるため、自分に合ったツールを作ることができます。
  4. 学習効果:Pythonでツールを自作し、exeファイルにする過程で、プログラミングスキルを向上させることができます。

ちなみに、ChatGPTでは以下のプロンプトを入力して画像を生成しています。

QRコード生成ツールのアイコンを作成してください。

まとめ

出来上がったexeは、以下。

このexeを起動すると、次のようなGUIアプリが起動します。

個人的には、これで満足しています。
たかがQRコードでツールを開発するのは、時間の無駄とも感じるかもしれません。

でも、このツールの開発にかかった時間は30分未満です。
なぜなら、コードはChatGPTとClaude 3を用いて作成しているからです。

それなら、自作するのもアリだと思いませんか?
私は、仕様を伝えて、レビューして、テストしただけです。

本当に、コードを書く機会が減ってきています。
でも、これはこれで楽しいと言えます。

要件をまとめて伝えれば、すぐに望むモノが出来上がるわけですから。
あと、コードレビューとテストの機会は確実に増えていますけどね。

タイトルとURLをコピーしました