이번에는 파이썬으로 입력받은 내용으로 QR코드를 만들어주는 프로그램을 만들어 보겠습니다. 일단 편의를 위해 입력받는 내용 QR코드가 저장되는 경로를 받아서 처리하도록 설정했습니다. 우선 만들어서 어떻게 보완해 가는지 내용을 보시겠습니다.
프롬프트
입력받은 내용을 QR코드로 만들어 입력받은 경로에 저장해주는 프로그램을 만들어줘
ChatGPT 결과
다음은 입력받은 내용을 QR 코드로 변환하여 지정된 경로에 저장하는 Python 프로그램입니다. qrcode 라이브러리를 사용하여 QR 코드를 생성하고 PIL을 이용해 이미지를 저장합니다.
이 코드를 실행하면 사용자가 입력한 데이터를 QR 코드로 변환하여 지정된 경로에 저장합니다. 필요에 따라 경로가 존재하지 않으면 자동으로 생성됩니다. qrcode 라이브러리가 설치되지 않았다면 pip install qrcode[pil]을 사용하여 설치하세요.
코드
import qrcode
import os
def generate_qr_code(data: str, save_path: str):
"""
입력받은 데이터를 QR 코드로 변환하여 지정된 경로에 저장합니다.
:param data: QR 코드에 담을 데이터 (문자열)
:param save_path: QR 코드 이미지를 저장할 파일 경로 (예: 'output.png')
"""
try:
# QR 코드 생성
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
# 이미지 생성 및 저장
img = qr.make_image(fill='black', back_color='white')
directory = os.path.dirname(save_path)
if directory and not os.path.exists(directory):
os.makedirs(directory)
img.save(save_path)
print(f"QR 코드가 성공적으로 생성되어 {save_path}에 저장되었습니다.")
except Exception as e:
print(f"오류 발생: {e}")
if __name__ == "__main__":
data = input("QR 코드에 담을 내용을 입력하세요: ")
save_path = input("QR 코드 이미지를 저장할 경로를 입력하세요 (예: ./qrcode.png): ")
generate_qr_code(data, save_path)
에러
Traceback (most recent call last):
File "C:\Users\qwe\pythonPG\makeQrCd.py", line 1, in <module>
import qrcode
ModuleNotFoundError: No module named 'qrcode'
챗지피티가 말해줬듯이 qrcord 설치가 빠져 모듈이 없다는 에러가 났습니다.
그럼 설치해 보겠습니다.
pip install qrcode[pil]
명령어를 실행해 qrcord를 인스톨했습니다.
자 그럼 다시 결과를 볼까요?
재실행
naverQR.png 파일이 실행시킨 경로에 생성되었습니다.
열어보면 이렇게 정상적으로 완성된 걸 보실 수 있습니다.
핸드폰으로 찍어보시면 네이버로 이동이 됩니다.
여기서 만족이 되시나요? ^^
전 너무 불편합니다. 조금 더 편리하게 GUI를 이용하고 부설 기능을 추가해 보도록 하겠습니다.
고도화
자 제가 일단 발견한 불편한 점은
1. GUI가 아닌 점
2. 입력창이 존대했으면 좋겠다는 점
3. 파일경로를 수기입력하는 것이 아니라 파일경로 버튼으로 처리
4. 파일명은 이름만 입력하면 자동으로
5. 생성 후 자동열림
자 이렇게 만들어지면 더 편리하겠죠?
프로그램을 만들 때 USER의 입장에서 생각해야 하는 경우가 많습니다. 사용자가 편리하도록 만들어야 하거든요 일단 만들어서 불편한 점이 없나 살펴보도록 하겠습니다.
고도화프롬프트
이프로그램을 GUI 화 시켜서 이쁘게 만들었으면 좋겠고 QR코드내용 이라는 입력란을 만들어주고 파일경로입력란이 있고 옆에 버튼을 만들어서 파일경로를 버튼으로 찾아 입력하는방식 두가지 모두 사용할 수 있도록 하고싶어 그리고 파일명도 입력란을 만들고 파일명만입력하면 자동으로 .png 로 만들어주고 만약 입력을 안했다면 년월일시분초.png 파일로 만들어줘 그리고 최종 완료되면 해당 경로창을 열어주고 해당 파일을 오픈해줘
자세히 묘사해 줄수록 GPT가 잘 알아먹습니다.
자 저도 즉흥적으로 쓴 건데 결과가 어떻게 되었을까요?
궁금하네요.
ChatGPT 결과
이제 GUI 환경에서 QR 코드를 생성할 수 있으며, 사용자는 직접 경로를 입력하거나 "찾기" 버튼을 이용해 폴더를 선택할 수 있습니다. 파일명을 입력하지 않으면 자동으로 날짜/시간 기반의 파일명이 설정됩니다. 또한, QR 코드 생성 후 해당 폴더를 열고 생성된 파일을 바로 확인할 수 있습니다.
코도화된 코드
import qrcode
import os
import tkinter as tk
from tkinter import filedialog, messagebox
from datetime import datetime
from PIL import Image
def generate_qr_code():
"""
입력받은 데이터를 QR 코드로 변환하여 지정된 경로에 저장하고 자동으로 열기.
"""
data = entry_data.get()
save_dir = entry_path.get()
file_name = entry_filename.get().strip()
if not data:
messagebox.showerror("오류", "QR 코드에 담을 내용을 입력하세요.")
return
if not save_dir:
messagebox.showerror("오류", "저장할 경로를 입력하세요.")
return
if not file_name:
file_name = datetime.now().strftime("%Y%m%d%H%M%S")
save_path = os.path.join(save_dir, f"{file_name}.png")
try:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill='black', back_color='white')
img.save(save_path)
messagebox.showinfo("완료", f"QR 코드가 성공적으로 저장되었습니다: {save_path}")
os.startfile(save_dir) # 경로 창 열기
os.startfile(save_path) # 생성된 파일 열기
except Exception as e:
messagebox.showerror("오류", f"오류 발생: {e}")
def browse_directory():
"""사용자가 폴더를 선택하도록 하는 함수."""
folder_selected = filedialog.askdirectory()
if folder_selected:
entry_path.delete(0, tk.END)
entry_path.insert(0, folder_selected)
# GUI 설정
root = tk.Tk()
root.title("QR 코드 생성기")
root.geometry("400x250")
# QR 코드 내용 입력
tk.Label(root, text="QR 코드 내용").pack()
entry_data = tk.Entry(root, width=50)
entry_data.pack()
# 저장할 경로 입력
frame_path = tk.Frame(root)
frame_path.pack()
tk.Label(frame_path, text="파일 경로").pack(side=tk.LEFT)
entry_path = tk.Entry(frame_path, width=30)
entry_path.pack(side=tk.LEFT)
tk.Button(frame_path, text="찾기", command=browse_directory).pack(side=tk.LEFT)
# 파일명 입력
tk.Label(root, text="파일명 (미입력시 자동생성)").pack()
entry_filename = tk.Entry(root, width=50)
entry_filename.pack()
# 생성 버튼
tk.Button(root, text="QR 코드 생성", command=generate_qr_code).pack()
root.mainloop()
결과
좀 이뻐졌죠? ㅎ
이번엔 제 블로그를 QR코드로 만들어 홍보용으로 사용하는 취지로 해보겠습니다.
문서에 저장해 보겠습니다. 이름은 일단 입력해 볼게요.
생성해 보겠습니다.
이름 없이 생성한 버전도 보시죠.
년도월일시분초.png로 잘 생성되었습니다.
이렇게 만든 건파일명이 최대한 겹치지 않도록 하기 위함입니다. Duplication이라고 하는데 그러지 않도록 고유(uniq)의 이름을 갖게 하는게 목적입니다.
확인버튼을 누르면
자 어떤가요? 처음 했던 프로그램보다 더 완성도가 높아졌습니다.
^^ 찍어볼까요? 어디로 가게 될까요?
그럼 오늘도 즐거운 프로그래밍이 되셨길 바라며 이상 IT아재였습니다.
'IT정보 > AI프로그래밍' 카테고리의 다른 글
텍스트와 음성을 특정언어로 변환해주는 프로그램 만들기 (0) | 2025.03.16 |
---|---|
프린트스크린샷 기능을 단축키로 변경해주는 프로그램 (0) | 2025.03.14 |
내컴퓨터 정보확인하는 프로그램 (0) | 2025.03.14 |
텍스트를 음성으로 음성을 텍스트로 변경하는 프로그램 (0) | 2025.03.13 |
내부 외부 IP 확인하는 프로그램 만들기 (0) | 2025.03.13 |