目次
はじめに
適当なURLをQRコードとしてクリップボードに保存するpythonスクリプトを作成した。
生成AIにコードを作成してもらう練習ついでに作ったが、流石に適当な指示一発ではできなかったものの複数回やり取りをしたら一応動作するコードができました。そのため今回ソースコードに関してはじっくりソースコードを眺めていないです。
インストール
必要に応じて以下のものをPythonと必要なライブラリをインストールする。
既にインストール済みであれば不要。
Pythonのインストール時はAdd Python to PATH
の項目にチェックを入れるようにする。
インストール後は以下のコマンドで必要なライブラリをインストールする。
pip install qrcode[pil]
pip install pywin32
ソースコード
import win32clipboard
の記載がある通りWindows OS向けのスクリプトになります。
URL2QRcode.py
import tkinter.filedialog
import os
import io
import qrcode
import win32clipboard
from datetime import datetime
# Choose save folder by filedialog
def save_folder():
fTyp = [("", "*")]
iDir = os.path.abspath(os.path.dirname(__file__))
folder_name = tkinter.filedialog.askdirectory(initialdir=iDir)
return folder_name
def generate_qr_code(url):
# Generate QR code
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
# Add URL to QR code
qr.add_data(url)
qr.make(fit=True)
# Generate QR code image
img = qr.make_image(fill_color="black", back_color="white")
return img
def save_to_clipboard(img):
# Save QR code image to clipboard using win32clipboard
temp_file_path = "temp_qr.png"
img.save(temp_file_path) # Save temporarily
output = io.BytesIO()
img.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
send_to_clipboard(win32clipboard.CF_DIB, data)
os.remove(temp_file_path)
print("QR code copied to clipboard!")
def send_to_clipboard(clip_type, data):
# Clear the clipboard and set the data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(clip_type, data)
win32clipboard.CloseClipboard()
def save_to_file(img, folder_name, filename):
# Save QR code image to file
if not filename:
# Generate a filename based on the current date and time
now = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"qr_{now}.png"
# Check if the filename has an extension
if not filename.endswith(".png"):
filename += ".png"
# Combine folder name with filename
file_path = os.path.join(folder_name, filename)
img.save(file_path)
print(f"QR code saved as {file_path}")
# URL input
url = input("URL: ")
# Generate QR code
qr_img = generate_qr_code(url)
# Ask for save method
save_method = input("Save QR code to clipboard (c) or as a file (f)? ").lower()
if save_method == 'c':
save_to_clipboard(qr_img)
elif save_method == 'f':
folder_name = save_folder()
if not folder_name:
print("No folder selected. QR code will not be saved.")
else:
filename = input("Filename (press Enter to auto-generate): ")
save_to_file(qr_img, folder_name, filename)
else:
print("Invalid choice. QR code will be saved as a file.")
folder_name = save_folder()
if not folder_name:
print("No folder selected. QR code will not be saved.")
else:
filename = input("Filename (press Enter to auto-generate): ")
save_to_file(qr_img, folder_name, filename)