[Python 프로젝트] 맛집 리뷰 자동화 만들기 #1 함수 맛보기
예전에 내 맛집 포스팅을 보고는 내용이 비슷비슷하여사진만 넣으면 알아서 써주는 프로그램을 만들어보라고지나가던 말을 해주던 사람이 있었는데 도전해 봅니다. 아직 기초 중에 기초밖에
creatolog.tistory.com
#1 포스팅 완료 후 다음 단계 가자니까 뜬금없이 GUI부터 만들어주는 뤼튼 씨.
저는 말 잘 듣는 사람이니 GUI부터 해봅시다.
GUI는 정말 아무것도 없는 빈 창밖에 안 만들어 봤소.
0. review_gui.py 새 파일 생성하고 시작합니다.
1. tkinter 임포트
import tkinter as tk
from tkinter import ttk
2. 기본 윈도 생성
class ReviewMaker:
def _init(self):
self.window = tk.Tk()
self.window.title("리뷰 메이커 v2.0")
3. 입력 폼 추가하기
def add_basic_info(self):
basic_frame = tk.Frame(self.window)
basic_frame.pack(pady=5)
fields = ['가게명:', '위치:', '분위기:', '가격대:']
self.entries = {}
tk.Label(row, text=field, width=8).pack(side='left')
self.entries[field] = tk.Entry(row)
self.entries[field].pack(side='left',expand=True, fill='x')
4. 창이 안 떠요.
- init에서 mainloop()가 빠졌어.
class ReviewMaker:
def _init(self):
self.window = tk.Tk()
self.window.title("리뷰 메이커 v2.0")
# 기본 정보 입력 함수 호출
self.add_basic_info()
# 창 실행
self.window.mainloop();
def add_basic_info(self):
basic_frame = tk.Frame(self.window)
basic_frame.pack(pady=5)
fields = ['가게명:', '위치:', '분위기:', '가격대:']
self.entries = {}
tk.Label(row, text=field, width=8).pack(side='left')
self.entries[field] = tk.Entry(row)
self.entries[field].pack(side='left',expand=True, fill='x')
# 실행
if _name_ == "_main_":
app = ReviewMaker()
5. 메뉴 입력
def add_menu_input(self):
menu_frame = tk.LabelFrame(self.window,text="메뉴 입력")
menu_frame.pack(padx=5, pady=5, fill='x')
# 메뉴 입력 행 추가 버튼
add_btn = tk.Button(menu_frame, text="메뉴 추가", command=self.add_menu_row)
add_btn.pack(pady=5)
self.menu_rows() = [] # 메뉴 입력 행 저장용
self.add_menu_row() # 첫 번째 메뉴 행 추가
def add_menu_row(self):
row = tk.Frame(menu_frame)
row.pack(fill='x', padx=5, pady=2)
menu = tk.Entry(row, width=20)
price = tk.Entry(row, width=10)
tk.Label(row, text="메뉴:").pack(side='left')
menu.pack(side='left', padx=5)
tk.Label(row, text="가격:").pack(side='left')
price.pack(side='left', padx=5)
self.menu_rows.append((menu, price))
def _init(self):
self.window = tk.Tk()
self.window.title("리뷰 메이커 v2.0")
# 기본 정보 입력 함수 호출
self.add_basic_info()
self.add_menu_input() # 추가
# 창 실행
self.window.mainloop();
6. 선생님. 실행이 안 돼요. 나 타자 연습 한 거야?
빨간(색은 아니지만 에러인) 줄이 너무 많아서 1도 모르겠습니다.
GUI 기초 없이 따라 하려니까 모르겠지만 소스 정리 다시 해줘서 아무튼 해봅니다.
from tkinter import *
from tkinter import ttk
class ReviewMaker:
def __init__(self):
self.window = Tk()
self.window.title("리뷰 메이커 v2.0")
self.basic_info()
self.menu_info()
self.window.mainloop()
def basic_info(self):
frame = Frame(self.window)
frame.pack(pady=5)
fields = ['가게명:', '위치:', '분위기:', '가격대:']
self.entries = {}
for f in fields:
row = Frame(frame)
row.pack(fill='x', padx=5, pady=2)
Label(row, text=f, width=8).pack(side='left')
self.entries[f] = Entry(row)
self.entries[f].pack(side='left', expand=True, fill='x')
def menu_info(self):
self.menu_frame = LabelFrame(self.window, text="메뉴 입력")
self.menu_frame.pack(padx=5, pady=5, fill='x')
btn = Button(self.menu_frame, text="메뉴 추가", command=self.add_row)
btn.pack(pady=5)
self.menu_rows = []
self.add_row()
def add_row(self):
row = Frame(self.menu_frame)
row.pack(fill='x', padx=5, pady=2)
menu = Entry(row, width=20)
price = Entry(row, width=10)
Label(row, text="메뉴:").pack(side='left')
menu.pack(side='left', padx=5)
Label(row, text="가격:").pack(side='left')
price.pack(side='left', padx=5)
self.menu_rows.append((menu, price))
app = ReviewMaker()
앞전에 했던 코드는 모두 잊어주세요. 어차피 실무는 복붙이에요.
그러므로 복붙 합니다. 이해는 했냐고요? 네, 뭐 대충은요.
UI 되게 깔끔하게 잘 만들었네요. 메뉴 추가 누르면 메뉴 입력할 수 있는 칸이 추가됩니다.
7. 리뷰 생성 버튼 및 결과 창 생성
def create_review(self):
review_text = Text(self.window, height=10, width=50)
review_text.pack(padx=5, pady=5)
create_btn = Button(self.window, text="리뷰 생성", command=lambda: self.generate())
create_btn.pack(pady=5)
들여 쓰기가 마음대로 안 되네요. def 한 단계 들여 쓰기 해줘야 해요. 클래스로 묶여 있어요.
이번에는 성공적으로 받아쓰기 잘했습니다.
def __init__(self):
self.window = Tk()
self.window.title("리뷰 메이커 v2.0")
self.basic_info()
self.menu_info()
self.create_review() # 여기 추가
self.window.mainloop()
여기도 마찬가지로 def 들여 쓰기 한 칸 더 있습니다.
아무튼 방금 만든 리뷰 생성 버튼 및 결과 창 생성하는 함수 호출도 해줍니다.
우와 이제 진짜 리뷰메이커가 완성되었어요. 물론 껍데기만.
8. 리뷰 생성
def generate(self):
store = self.entries['가게명:'].get()
location = self.entries['위치:'].get()
mood = self.entries['분위기:'].get()
price = self.entries['가격대:'].get()
menus = []
for menu, price in self.menu_rows:
if menu.get() and price.get():
menus.append(f"{menu.get()} ({price.get()}원)")
review = f"[{store}]\n"
review += f"위치 : {location}\n"
review += f"분위기 : {mood}\n"
review += f"가격대 : {price}\n\n"
review += "메뉴 : \n" + "\n".join(menus)
self.review_text.delete(1.0, END)
self.review_text.insert(END, review)
입력한 내용을 토대로 진짜 간략하게 리뷰를 작성했습니다.
이건 나중에 진짜 리뷰같이 바꿔줍시다^^.
def create_review(self):
self.review_text = Text(self.window, height=10, width=50)
self.review_text.pack(padx=5, pady=5)
create_btn = Button(self.window, text="리뷰 생성", command=lambda: self.generate())
create_btn.pack(pady=5)
아무튼 변경해 주래서 했습니다.
데이터도 뤼튼이 시키는 대로 넣어봤는데 이상한 값이 들어갑니다.
def generate(self):
store = self.entries['가게명:'].get().strip()
location = self.entries['위치:'].get().strip()
mood = self.entries['분위기:'].get().strip()
price_range = self.entries['가격대:'].get().strip()
review = f"[{store}]\n"
review += f"위치: {location}\n"
review += f"분위기: {mood}\n"
review += f"가격대: {price_range}\n\n"
review += "메뉴:\n"
for menu, price in self.menu_rows:
menu_text = menu.get().strip()
price_text = price.get().strip()
if menu_text and price_text:
review += f"{menu_text} ({price_text}원)\n"
self.review_text.delete(1.0, END)
self.review_text.insert(END, review)
함수 수정해 줘서 붙여 넣기 했더니 잘 됩니다.
원래 없던 스펙인데, 리뷰 저장이야기 하길래 복사면 될 것 같다니까 바로 만들어줌.
9. 리뷰 복사
def create_review(self):
self.review_text = Text(self.window, height=10, width=50)
self.review_text.pack(padx=5, pady=5)
btn_frame = Frame(self.window)
btn_frame.pack(pady=5)
Button(btn_frame, text="리뷰 생성", command=self.generate).pack(side='left', padx=2)
Button(btn_frame, text="복사하기", command=self.copy_review).pack(side='left', padx=2)
복사하기 버튼 추가해 주고.
def copy_review(self):
self.window.clipboard_clear()
self.window.clipboard_append(self.review_text.get(1.0, END))
함수도 만들어줍니다.
복사하기 누르면 복사 잘 됩니다.
뤼튼이 너무 떠 매겨주니까 제 실력이 느는 것 같긴 한데요.
원래 이러면서 배우는 거지. 나 자바 처음 배울 때 SQL이 뭔지도 모르고 DB 연결부터 배움.
뤼튼이랑은 수다나 떨고, 챗지피티랑 하다 만 기초 진도부터 빼야겠다^^
아닌데 AI 연결하는 거까지는 해봐야 하는데, 이거 진도 다시 상기시키기 귀찮으니 찍먹 한번 합시다.
'Python' 카테고리의 다른 글
[Python] tkinter로 간단하게 달력 만들기 (1) | 2024.12.12 |
---|---|
[Python 프로젝트] 맛집 리뷰 자동화 만들기 #3 AI 연동하기 (2) | 2024.12.11 |
[Python 프로젝트] 맛집 리뷰 자동화 만들기 #1 함수 맛보기 (2) | 2024.12.10 |
[Python] NameError : name 'Tk' is Not Defined 해결 방법 (0) | 2024.12.10 |
[파이썬 기초] 연산자 계산기 만들기 (2) | 2024.12.10 |