以下は『符呪刻印』のソースコード全文です:
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()