QRコード生成器『符呪刻印』 ソースコード

以下は『符呪刻印』のソースコード全文です:

 
        import tkinter as tk
        from tkinter import messagebox
        from PIL import Image, ImageTk
        import qrcode
        import os
        from datetime import datetime
        
        class QRCodeApp:
            def __init__(self, root):
                self.root = root
                self.root.title("QRコード生成器 - 符呪刻印")
                self.prefix = tk.StringVar(value="none")  # デフォルトは「なし」
        
                # 入力欄(複数行対応)
                tk.Label(root, text="文字列を入力してください(改行対応):").pack(pady=5)
                self.textbox = tk.Text(root, width=50, height=5)
                self.textbox.pack(pady=5)
        
                # 接頭辞のラジオボタン
                prefix_frame = tk.LabelFrame(root, text="接頭辞の選択")
                prefix_frame.pack(pady=5)
        
                prefix_options = [
                    ("なし", "none"),
                    ("http://", "http://"),
                    ("https://", "https://"),
                    ("mailto:", "mailto:")
                ]
        
                for text, val in prefix_options:
                    rb = tk.Radiobutton(prefix_frame, text=text, variable=self.prefix, value=val)
                    rb.pack(side=tk.LEFT)
        
                # PNG保存のチェックボックス
                self.save_png = tk.BooleanVar()
                tk.Checkbutton(root, text="PNGとしてデスクトップに保存", variable=self.save_png).pack(pady=5)
        
                # 変換ボタン
                tk.Button(root, text="変換", command=self.confirm_and_generate).pack(pady=10)
        
                # QRコード表示エリア
                self.image_label = tk.Label(root)
                self.image_label.pack()
        
            def confirm_and_generate(self):
                # 複数行テキストを取得(末尾改行除去)
                text = self.textbox.get("1.0", tk.END).rstrip()
                if not text.strip():
                    messagebox.showwarning("警告", "文字列が空です。")
                    return
        
                # プレフィックス処理
                selected_prefix = self.prefix.get()
                if selected_prefix == "none":
                    selected_prefix = ""
        
                full_text = selected_prefix + text
        
                # 確認ポップアップ
                if messagebox.askokcancel("確認", f"次の文字列をQRコードに変換しますか?\n\n{full_text}"):
                    self.generate_qr(full_text)
        
            def generate_qr(self, data):
                # QRコード生成
                qr = qrcode.QRCode(
                    version=None,  # 自動サイズ調整
                    error_correction=qrcode.constants.ERROR_CORRECT_M,
                    box_size=10,
                    border=4,
                )
        
                qr.add_data(data)
                qr.make(fit=True)
                img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
        
                # PNG保存
                if self.save_png.get():
                    desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
                    filename = datetime.now().strftime("%Y%m%d_%H%M%S") + ".png"
                    filepath = os.path.join(desktop_path, filename)
                    img.save(filepath)
                    messagebox.showinfo("保存完了", f"QRコードを保存しました:\n{filepath}")
        
                # 表示用にリサイズ
                img_resized = img.resize((200, 200))
                self.tk_image = ImageTk.PhotoImage(img_resized)
                self.image_label.configure(image=self.tk_image)
                self.image_label.image = self.tk_image
        
        if __name__ == "__main__":
            root = tk.Tk()
            
            ##タイトルバーアイコン表示用
            data = '''R0lGODdhEAAQAIcAAFqZkVaUjkuVh1OPglGOgU2OgViNh1iMhUeIfEt/eEd+dDqLgDqHfj6DfER/dD18cjF8cxx+cUl7ckR7dUZ3ckB4cj53bTR4bj9waDNxajlpYyZ3cChyaiZwaxlzZyRuaC1pYhVnYDZjXSNmXxpmYhdlXRZmXxVdVxpcVRJXUxxVTxVTUBFTUB9QTB9OSxVRTBBIRw5OSw9JRw1IRR9HRR1EQg9GRQ9BQA8+PQ1DQAw/Pg4+Ow47Ow07ORA4NhA2NA03Ng01NQ00NQw0NQ8zMgwzNA0yMw0xMAsxMA0vLwwuLwwtLgssLAosLQksKw0rKwwrKgwqKwsqKgsoKQooKQgqKQkoKAsnKAonJwomKAcmJwslJwskJQokJgojJAclJgkjIgoiJAkiIwkiIgohIwohIgogIgofIQgfHwoeIAkeHwgdHgkcHggcHQkbHQgbGwkaHAgaGwgZGwgZGggZGQcaGgcZGgQaGwgXGQgXGAcXGQgVFgcVFwcVFggUFQcUFQcTFQcTFAYVFgYUFgYTFAUTFQMTFQcSFAcSEwcREwcREgYREwMSFQcQEQYQEQYPEQYPEAUPEQUPEAIQEgYOEAYODwUOEQUNEAUNDwUNDgQNDwQNDgUMDQQMDgULDQQLDQQLDAQKDAQKCwMKDAMKCwQJCwMJDAMJCwMJCgMICgMICQIJCgIICgIICQIHCQIHCAEHCQIGCAEGCAEGBwEFBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAEAI/wBn0ZJ16lMqV5b0LDJ1UJbDTI7yxAHCoAEEDgtGfBnTx1GjVKxGjUoC4AAGEQYC/BCE6JSqTH+8dCliA0aJEzdwGCFz5g+nVq5cfRrEaJKTHXcMxYkUy9UsR5kkvdFioQCBAQoc+CiU6VElR3/mYGmiI0YIEzNy9LDy5g8kV6Qe/ZGTxsyVMGzc4DmU6VOpV65kadrU6ZIaKW4wPcJEi9YsV7BWfRJTg4YKFC5aQPmDCdUrUKc2RXpSIYEEDRQmEEHjKFQlRYEI2TkCIgOCBwIuVKmzR1ElSJTorGHyocMGEiteIAHzx89vPmWoDJGRIoIHFjaEZGkDCFIoSnC4TB9RYoRHkCVRtpSR8yiUqlShQnmi9EhRokeUMoGKLyogADs=''' 
            root.tk.call('wm', 'iconphoto', root._w, tk.PhotoImage(data=data))
            ####
            
            app = QRCodeApp(root)
            root.mainloop()
        
    

📦 ダウンロード 🏠 ホームへ