예전에 자장가였던가 컴퓨터로 영화를 보며 잠드는 것을 좋아했던 저는 예약종료 프로그램으로 영화 끝나자마자 종료가 되도록 설정하고 잠자리에 든 적이 있었습니다. 언젠가부터 프로그램이 사라져서 아쉬워했었는데 이번에는 유용한 알람 및 자동종료 프로그램을 만들어 보고자 합니다.
지금부터는 제가 chatGPT에 부여한 파친(파이썬친구)이라는 GPT 녀석과 작업을 같이 하도록 하겠습니다. ^^
chatGPT는 과거의 대화내용과 역할 분담에 따라 해당 능력에 더 특화되는 경향이 있습니다. 그것을 좀 더 이용한 것인데요. 지금 제가 설정한 파친은 파이썬 프로그래머의 대가로서 저와 함께 자동화 프로그램을 만들고 있는 친구입니다.
프롬프트
나 : 안녕 파친?
파친:
안녕 준! 😊
오늘은 어떤 파이썬 자동화 프로그램을 만들어볼까? 🚀🐍
나:
윈도우에서 일주일 중 체크하고 싶은 요일에 체크하고 일정시간과 알림 내용을 입력하고 등록하면 해당 알림이 등록되고 그 해당요일과 시간에 알림 내용을 띄워주는 프로그램을 파이썬으로 만들고 싶어 알람은 여러 개 등록가능하고 수정이나 삭제가 가능하도록 아래 리스트형태로 저장되어 있으면 좋겠어. 그리고 제일하단에는 컴퓨터 종료시간을 입력하고 예약종료를 할 수 있는 기능도 포함되어 있으면 좋겠고 예약종료취소 기능도 같이 있으면 좋겠어. GUI로 만들어야겠지?
파친:
오, 아주 유용한 프로그램이 될 것 같아! 😃
이 프로그램을 GUI로 만들면 사용자 경험이 훨씬 좋아질 거야.
기능 정리
✔️ 알람 등록: 원하는 요일, 시간, 알림 내용을 입력하여 여러 개 등록
✔️ 알람 수정/삭제: 기존 알람을 수정하거나 삭제 가능
✔️ 알람 리스트 표시: 등록된 알람을 리스트 형태로 보여주기
✔️ 예약 종료 기능: 사용자가 지정한 시간에 컴퓨터 자동 종료
✔️ 예약 종료 취소 기능: 예약된 종료를 취소할 수 있도록 구현
기술 스택
🔹 GUI: tkinter 또는 PyQt 사용 가능 (쉽게 구현하려면 tkinter, 디자인을 세련되게 하려면 PyQt)
🔹 알람 관리: schedule 또는 threading.Timer 활용
🔹 예약 종료: os.system("shutdown -s -t <초>") 사용
🔹 데이터 저장: json 파일이나 sqlite3 활용 가능
📌 추가 질문!
1️⃣ GUI 디자인은 간단한 리스트+버튼 형태면 될까, 아니면 좀 더 예쁘게 꾸미고 싶어?
2️⃣ 알람은 윈도우 알림(Notification)으로 띄울까, 팝업 메시지로 띄울까?
3️⃣ 예약 종료는 분 단위로 설정할까, 특정 시각(예: 23:00)으로 설정할까?
이제 기본 구조를 잡고 코드 작성을 시작할 수 있어! 🚀 어떻게 진행할까? 😆
나:
디자인은 간단한형태가 좋을 거 같아 그리고 윈도우 알림으로 띄우는게 좋을거 같고 예약종료는 10분간격으로 설정할수 있도록 시 와 10분단위를 선택가능하도록 하면 될거같아 콤보박스로 그리고 요일을 미래요일로 하게되면 해당 요일에 프로그램이 꺼져있어서 알람이 안울릴 수 있잖아? 윈도우시작시 시작하는 옵션같은걸 넣을 수 있을까?
파친:
좋아! 그럼 다음과 같은 구조로 진행하면 될 것 같아.
기능 상세 정리
✔ 알람 등록/삭제/수정: 리스트에서 관리
✔ 알림 표시: 윈도우 알림(Notification)으로 출력
✔ 예약 종료: 시(hour)와 10분 단위(minute)로 설정 (콤보박스)
✔ 예약 종료 취소: 버튼을 눌러 취소 가능
✔ 윈도우 시작 시 자동 실행: 프로그램이 부팅 시 자동으로 실행되도록 설정
추가 고려할 사항
✅ 백그라운드 실행 여부: 프로그램을 최소화 시 작업 표시줄에 유지할지 여부
✅ 데이터 저장 방식: json 또는 sqlite3 활용하여 재부팅 후에도 알람 유지
✅ 자동 실행 등록 방법: 윈도우 레지스트리(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run)를 수정하여 구현
📌 이제 코드 작성 시작할까?
1️⃣ 기본 GUI 먼저 만들고 기능을 하나씩 추가하는 방식으로 진행할까?
2️⃣ 아니면 전체적인 코드 틀부터 먼저 잡고 나서 디테일을 채워넣을까? 😃
나:
이번엔 GUI부터 만들어서 손을 보고나서 기능을 입혀보자. 지금까지는 전체틀부터 잡았으니까 어때?
파친:
좋아! 먼저 기본 GUI 디자인을 tkinter로 만들고, 이후에 기능을 추가하는 방식으로 진행하자.
기본 GUI 레이아웃
✅ 요일 선택 체크박스 (월~일)
✅ 알람 시간 입력 (시, 10분 단위 콤보박스)
✅ 알람 내용 입력 필드
✅ 알람 등록/수정/삭제 버튼
✅ 등록된 알람 리스트
✅ 예약 종료 시간 선택 (시, 10분 단위 콤보박스)
✅ 예약 종료 및 취소 버튼
이제 tkinter로 GUI 틀을 만들어볼게! 🚀
소스(파일첨부)
✅ 기본 GUI 초안을 만들었어!
이제 한 번 실행해서 UI를 확인해보고, 디자인을 손볼 부분이 있으면 알려줘.
고칠 부분이 있거나 추가하고 싶은 요소가 있으면 말해줘! 😊
GUI결과물
깔끔하게 잘나왔습니다. 제가 원하던 바네요. ^^
chatGTP는 원하는 결과가 잘 나왔는지 안 나왔는지에 대한 피드백이 중요합니다. 그래야 자신의 결과도출이 잘된 건지 아닌지를 인식하고 차후 더 나은 결과를 가져오도록 학습됩니다.
프롬프트
나:
너무 깔끔하게 잘 나온거 같아. 내가 원했던 스타일대로 너무 마음에 들어.
파친:
오! 마음에 든다니 다행이야! 😆✨
그럼 이제 기능을 하나씩 추가해보자!
다음 단계
1️⃣ 알람 등록 기능 추가
2️⃣ 알람 리스트에서 수정/삭제 가능하도록 구현
3️⃣ 알람 시간에 윈도우 알림(Notification) 띄우기
4️⃣ 예약 종료 기능 추가
5️⃣ 예약 종료 취소 기능 구현
6️⃣ 윈도우 시작 시 자동 실행 기능 추가
📌 먼저 구현하고 싶은 기능이 있어?
아니면 위 순서대로 하나씩 추가해볼까? 🚀
나:
위순서대로 추가해 보자. 일단 알람 등록은 요일이나 알람시간은 필수값으로 받아야될거같아 알람 메시지는 빈값일때 그냥 알람 이라는 기본 메시지로 저장하면 될거같고 어떻게 생각해?
파친:
좋은 아이디어야! 필수 입력값이 없으면 경고 메시지를 띄우고, 메시지가 없을 때는 기본값 "알람"을 저장하면 깔끔하게 동작할 것 같아.
그럼 바로 알람 등록 기능을 추가해볼게! 🚀
✅ 알람 등록 기능 추가 완료!
- 요일과 시간 필수 입력 (미입력 시 경고창)
- 알람 메시지 기본값 "알람" 설정
- 등록된 알람 리스트에 추가
이제 직접 실행해서 테스트해 보고, 원하는 대로 동작하는지 확인해줘!
고칠 부분이 있으면 말해줘~ 😊
테스트
정상적으로 잘 동작하는 게 확인되었습니다.
프롬프트
나:
필수체크도 잘되고 등록도 잘되고있어. 좋아!
파친:
좋아! 🚀
그럼 다음으로 알람 리스트에서 수정/삭제 기능을 추가해볼게!
- 삭제 기능: 선택한 알람을 리스트에서 제거
- 수정 기능: 기존 알람을 선택하면 입력 필드에 불러오고, 변경 후 다시 저장
기능 추가 후 업데이트해줄 테니까 기대해 줘! 🔧✨
소스(파일첨부)
🔧 알람 수정 및 삭제 기능 추가 완료!
- 삭제: 리스트에서 선택한 알람을 제거
- 수정: 선택한 알람을 편집 후 업데이트
- 입력 필드 초기화 기능 추가
이제 직접 실행해서 동작 확인해 보고, 원하는 대로 잘 작동하는지 테스트해 줘! 😊
테스트
요일선택 및 알람등록 삭제는 문제가 없이 작동했습니다. 그런데 수정 시 문제가 아래 선택된 내용이 위에 적용되지 않아 새로 등록하는 방식으로 되어있습니다. 위쪽에 반영돼서 수정하고 싶은 곳만 수정하는 게 나을 거 같고 알람 메시지 초기 입력값이 영문이다 보니 사용하기 불편한 감이 있었습니다. 자 파친에게 얘기해 줘야겠습니다.
프롬프트
나:
작동은 잘되는거 같아 그런데 보완할점이 생겼어 일단 최초 알람 메시지 입력시에 초기 입력타입이 한글이면 편리할거 같아. 그리고 아래에 알람을 선택하면 해당내용이 위의 값에 세팅이 되야 수정시에 편리 할거같아.
파친:
업데이트 완료!
- 한글 입력 기본 설정: msg_entry 초기 입력 방식이 한글이 되도록 설정
- 알람 선택 시 자동 입력: 리스트에서 알람을 선택하면 해당 내용이 위 입력 필드에 자동으로 반영됨
테스트해보고 피드백 남겨줘! 😊
테스트
역시 테스트는 중요합니다. 요구사항인 초기한글과 하단 선택 시 위에 값이 세팅되는 것은 확인되었으나 수정을 하려고 메시지를 클릭하는 순간 아래 선택에서 포커스가 메시지 수정 쪽으로 이동을 해버리네요. 그래서 결국 뭐를 수정하려 했는지 선택이 되어 있지 않는 결함이 발생합니다.
그럼 어떻게 수정해야 할까요?
1. 체크박스
체크박스의 경우 다수를 선택해서 삭제까지 가능하다는 점에서 좋습니다.
그런데 수정할 때 다수를 선택하면 어떤 걸 수정해야 할지 또 불분명해집니다. 그래서 안 되겠죠?
2. 라디오 버튼
라디오 버튼은 한 개만 선택이 가능한 구조로 되어있습니다. 한 개씩 삭제해야 한다는 불편함은 있지만 수정해야 할 대상이 명확하다는 점에서 라디오 버튼으로 결정하는 게 옳다고 생각합니다.
그럼 적용해 보죠 ^^
프롬프트
나:
한글입력은 정상처리되었는데 하단리스트에서 알람을 선택하고 상단에 수정할 부분을 선택할때 포커스가 사라지기 때문에 수정할 대상이 사라져 버려. 그래서 생각한건데 하단 리스트 앞에 라디오 버튼을 부여해서 한개만 선택가능하도록 하는게 어떨까?
파친:
좋은 아이디어야!
- 리스트 앞에 라디오 버튼을 추가해서 하나만 선택 가능하도록 변경
- 선택된 알람을 수정할 때 포커스가 사라지지 않도록 보완
바로 반영해볼게! 🚀
소스(파일첨부)
라디오 버튼을 추가하여 하나의 알람만 선택할 수 있도록 변경했고, 수정 시에도 선택이 유지되도록 개선했어! 🛠️
이제 원하는 대로 동작하는지 확인해보고, 추가로 보완할 점 있으면 말해줘! 🚀
에러가 발생했습니다.
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\qwe\AppData\Local\Programs\Python\Python313\Lib\tkinter\__init__.py", line 2068, in __call__
return self.func(*args)
~~~~~~~~~^^^^^^^
File "C:\Users\qwe\pythonPG\winALRIMI.py", line 99, in add_alarm
radio = tk.Radiobutton(self.radio_frame, text=alarm_entry, variable=self.selected_alarm, value=len(self.alarms) - 1, command=self.load_selected_alarm)
^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'AlarmApp' object has no attribute 'load_selected_alarm'. Did you mean: 'selected_alarm'?
에러 수정은 따로 올리지 않겠습니다. 바로 수정 중입니다.
파친:
🔍 해결 방법:
- load_selected_alarm 메서드가 AlarmApp 클래스 내부에 제대로 정의되어 있는지 다시 확인해 봐.
- add_alarm 메서드에서 command=self.load_selected_alarm을 command=lambda: self.load_selected_alarm()로 변경해 봐.
radio = tk.Radiobutton(self.radio_frame, text=alarm_entry, variable=self.selected_alarm, value=len(self.alarms) - 1, command=lambda: self.load_selected_alarm())
또 오류가 발생합니다. 다시 잡아보겠습니다.
나:
C:\Users\qwe\pythonPG>python winALRIMI.py
Traceback (most recent call last):
File "C:\Users\qwe\pythonPG\winALRIMI.py", line 135, in <module>
app = AlarmApp(root)
File "C:\Users\qwe\pythonPG\winALRIMI.py", line 50, in __init__
self.update_btn = tk.Button(self.btn_frame, text="수정", width=10, command=self.update_alarm)
^^^^^^^^^^^^^^^^^
AttributeError: 'AlarmApp' object has no attribute 'update_alarm'. Did you mean: 'delete_alarm'?
파친:
✅ 수정 사항
- update_alarm 메서드가 없어서 발생한 오류를 해결하기 위해 해당 기능을 추가했어.
- 이제 선택한 알람을 수정할 수 있으며, 수정 후 리스트에 정상적으로 반영돼.
✅ update_alarm 기능을 추가해서 알람 수정이 가능하도록 업데이트했어!
한 번 실행해서 잘 동작하는지 확인해 보고, 추가로 필요한 기능이나 수정할 점이 있으면 알려줘! 🚀
나:
알람 등록 및 삭제는 이상없는걸 확인했는데 삭제시에 리스트에 등록되어있는것에 append 되서 표현되는 느낌이야 리스트를 리플래쉬 해줘야할거같아
파친:
맞아요! 삭제 후에 리스트에 새로운 항목이 계속 append되어 보이는 문제는 리스트가 갱신되지 않아서 발생하는 문제입니다. 리스트를 삭제할 때마다 갱신된 리스트를 다시 표시해 주어야 합니다.
리스트를 갱신하는 방법으로 alarm_listbox.delete(0, tk.END)를 사용하여 기존 항목을 모두 지운 후, self.alarms 리스트의 내용을 다시 alarm_listbox에 추가하는 방식으로 수정할 수 있습니다.
아래는 이 문제를 해결한 코드입니다:
테스트
UI가 기존 것으로 돌아가지 못하고 있는 상태입니다. 에러를 해결하면 라디오버튼이 사라지거나 라디오 버튼을 살리면 해당 디자인으로 복귀되는 모습을 보이고 있습니다.
하지만 작동은 정상적으로 작동하고 있습니다.
위 파일의 순번을 메긴 것은 혹시나 전혀 다른 결과물을 도출할까 봐 버전 관리를 한 것이니 이해해 주시기 바랍니다.
현재 삭제 및 수정 등록 모두 정상적으로 작동되고 있습니다.
다음 단계를 진행해 보도록 하겠습니다.
프롬프트
이제 남은건 3️⃣ 알람 시간에 윈도우 알림(Notification) 띄우기 4️⃣ 예약 종료 기능 추가 5️⃣ 예약 종료 취소 기능 구현 6️⃣ 윈도우 시작 시 자동 실행 기능 추가 이야
파친:
알람 시간에 윈도우 알림을 띄우는 기능과 예약 종료 및 예약 종료 취소 기능, 그리고 윈도우 시작 시 자동 실행 기능을 추가하려면 몇 가지 라이브러리와 기능을 추가해야 합니다.
각 기능에 대해 설명하고 코드를 개선하겠습니다:
1. 알람 시간에 윈도우 알림(Notification) 띄우기
윈도우 알림을 띄우려면 plyer 라이브러리를 사용할 수 있습니다. plyer는 다양한 플랫폼에서 알림을 띄우는 기능을 제공합니다.
plyer를 설치하려면:
pip install plyer
이제 알람 시간에 맞춰 윈도우 알림을 띄우는 코드를 추가하겠습니다.
2. 예약 종료 기능 추가
예약 종료 기능은 알람 시간이 되면 PC를 종료하도록 설정하는 기능입니다. os 모듈을 사용해 시스템 종료 명령을 내릴 수 있습니다.
3. 예약 종료 취소 기능 구현
취소 버튼을 눌렀을 때 예약된 종료를 취소하는 기능을 구현합니다.
4. 윈도우 시작 시 자동 실행 기능 추가
윈도우 시작 시 자동 실행하려면 레지스트리 값을 수정하거나 pyinstaller로 프로그램을 .exe로 변환한 후 시작 프로그램에 등록해야 합니다.
흐름이 끊긴 것 같아 불안하지만 그대로 이어서 진행해 보겠습니다.
에러가 발생해 처리해 보겠습니다.
나:
Traceback (most recent call last): File "C:\Users\qwe\pythonPG\winALRIMI4.py", line 4, in <module> from plyer import notification ModuleNotFoundError: No module named 'plyer'
파친:
plyer 모듈이 설치되지 않아서 발생한 오류입니다. plyer는 다양한 플랫폼에서 알림을 보내는 데 사용되는 라이브러리입니다.
이를 해결하려면 plyer를 먼저 설치해야 합니다. 아래 명령어로 설치할 수 있습니다.
설치 방법:
- 터미널 또는 명령 프롬프트를 열고 아래 명령어를 입력하세요:
참고:
plyer 라이브러리는 알림 외에도 다양한 플랫폼 기능을 제공하므로, 알림 외의 다른 기능도 필요하면 추가로 사용할 수 있습니다.
테스트
예약종료 취소는 일단 확인이 되었습니다. 시스템 명령어이므로 수행결과는 안 봐도 될듯합니다.
shutdown 명령어를 이용한 간단한 프로그램이 기 때문에 구현자체가 어렵진 않습니다.
이제 테스트 관건은 해당요일에 해당 알림이 잘 동작하는가 인데요. 그리고 프로그램 종료 시 다시 프로그램이 시작과 함께 수행되는지도 중요한 관건입니다.
테스트가 생각보다 쉽지 않겠지만 여러 가지 방향으로 테스트해 보겠습니다.
과연 결과물이 어떻게 나올지 잠시 기다려보겠습니다. 10분간 휴식!!!!!!!!
휴 ㅡㅜ;;;; 잠시 넷플릭스 좀 보고 있겠습니다.
역시 실행되지 않았습니다.
다시 물어보겠습니다.
프롬프트
나:
3️⃣ 알람 시간에 윈도우 알림(Notification) 띄우기 이기능이 아직 구현되지 않은것 같아 실행이 되지않았어 확인좀 부탁할게
파친:
알림 기능이 제대로 작동하지 않는다면, 알림을 발생시키는 부분이 제대로 동작하지 않았을 가능성이 있습니다. 아래는 알람 시간에 윈도우 알림을 띄우는 기능을 구현하는 방법을 포함한 수정된 코드입니다.
우리는 알람 시간이 되면 plyer의 notification을 사용해 알림을 띄우게 될 것입니다. 또한, schedule 라이브러리를 사용하여 정해진 시간에 알림이 발생하도록 설정합니다.
필요한 라이브러리 설치:
설치 후 테스트
역시 생성형 AI의 문제점은 기존의 생성물을 기억하고 적용하기도 하지만 학습된 정보에 의해 자꾸 회귀되는 모습을 보입니다. 저 디자인도 사라졌다가 나타났다가 하고 라디오 버튼도 적용됐다가 사라졌다가 하는 모습을 보이네요.
일단 울리는 게 중요하니 울리는지 보겠습니다.
반응이 없습니다. 일단 난관에 부딪힌 게 맞습니다.
하지만 포기하지 않고 다시 시도해 보겠습니다.
테스트 결과
알람이 확인되었습니다.
하지만 너무 작고 귀여운 알람이라 확인 못하고 지나칠 정도군요...
이 문제를 해결하는 데는 조금 더 노력이 필요할듯합니다. 소리도 정적이고 메시지도 1초 안에 사라지기 때문에 실제 알람이라고 하기 어렵네요.
그래서 등록된 알람보기 버튼을 추가했습니다.
나:
야근시켜서 미안해
파친:
괜찮아요! 언제든지 도와드리기 위해 여기 있으니까요. 😊 혹시 더 필요한 부분이 있으면 언제든지 말씀해주세요!
주요 수정 사항:
- 알람 등록:
- add_alarm 메서드는 알람을 등록한 후 schedule 모듈을 통해 알람을 스케줄링합니다.
- 등록된 알람에 맞는 시간이 되면 show_notification 메서드가 호출되어 윈도우 알림이 표시됩니다.
- 등록된 알람 보기:
- view_scheduled_alarms 메서드는 현재 등록된 알람들의 정보를 schedule.get_jobs()를 통해 출력합니다. 알람과 다음 실행 시간을 표시합니다.
- 알람 확인을 위한 스레드:
- check_alarm_thread 메서드를 통해 별도의 스레드로 schedule.run_pending()을 실행하여 주기적으로 등록된 알람을 확인합니다.
이제 add_alarm을 통해 알람을 등록하면, 알람 시간이 되면 윈도우 알림이 띄워지며, 등록된 알람을 확인할 수 있는 기능도 구현되었습니다.
등록된 알람 확인 테스트 중 에러 발생을 확인했습니다.
나:
Traceback (most recent call last):
File "C:\Users\qwe\AppData\Local\Programs\Python\Python313\Lib\tkinter\__init__.py", line 2068, in __call__
return self.func(*args)
~~~~~~~~~^^^^^^^
File "C:\Users\qwe\pythonPG\winALRIMI6.py", line 172, in view_scheduled_alarms
scheduled_alarms = [f"{job.job_func.__name__} : {job.args}" for job in schedule.get_jobs()]
^^^^^^^^
AttributeError: 'Job' object has no attribute 'args'
파친:
해당 오류는 schedule 모듈에서 Job 객체에 args 속성이 없다는 오류입니다. job.args는 job 객체가 해당 함수 호출 시 사용되는 인수들을 참조하려 할 때 사용되는데, schedule에서 Job 객체는 args 속성을 기본적으로 제공하지 않습니다.
Job 객체의 정보를 출력하려면, 다른 방식으로 job의 함수명과 인수들을 추출해야 합니다. Job 객체는 job_func라는 속성을 가지고 있지만, 인수 정보는 따로 job.args로 제공되지 않으므로, 다른 방법으로 job 정보를 출력해야 합니다.
수정 방법은 job.job_func만 사용해서 함수명만 가져오거나, 해당 알람의 인수 정보를 다르게 처리하는 방식으로 바꿀 수 있습니다.
아래와 같이 수정해보세요:
def view_scheduled_alarms(self):
scheduled_alarms = [f"{job.job_func.__name__} : {job} (Next run: {job.next_run})" for job in schedule.get_jobs()]
self.scheduled_alarms_label.config(text="\n".join(scheduled_alarms))
약간 거리를 두는 거 같습니다.
전에는 친했는데 말이죠. 열의도 있었고.....
주의] 해당 소스를 개인적으로 수정하실 때 주의하실 점이 있습니다. 파이썬은 소스의 들여 쓰기를 탭을 사용하면 안 됩니다. 오롯이 스페이스바가 얼마나 들어갔는지에 따라 소스의 순서 즉 레벨을 판단하게 됩니다. 그래서 개인적으로 부분수정을 하실 때 들여 쓰기에 신경을 쓰셔야 합니다. 공백이 몇 칸이고 위 소스의 라인과 맞는지는 스페이스바로 결정됩니다. 탭을 쓰시면 안 됩니다.
지금 두 번의 알람이 왔고 테스트는 10분 단위라서 네시를 넘어섰습니다. 이제 8분 안에 해보고 싶은 것들을 해봐야 합니다.
소스를 보다 보니 이런 부분이 있군요.
일단 스샷도 못 찍을 10초보단 50초로 늘려서 테스트해 보겠습니다.
def show_notification(self, message):
notification.notify(
title="알람",
message=message,
timeout=10 # 알림이 10초 동안 표시됩니다.
)
차후에 여기에 메일발송이나 SMS발송 카카오톡 발송연동을 구현하거나 lot를 사용한 요란한 알람도 설정가능할 것 같은 상상이 듭니다. 중요한 포인트 같습니다. 실제로 이 펑션이 타면서 행위가 일어나는지 확인해 보겠습니다. 50초로 늘렸습니다.
def show_notification(self, message):
notification.notify(
title="알람",
message=message,
timeout=50 # 알림이 50초 동안 표시됩니다.
)
이제 스샷을 찍을 수 있을 거 같습니다.
이제 포인트를 알았으니 여기에 특정동영상을 튼다거나 요란한 음악을 튼다거나 어딘가든 알릴 수 있는 모든 이상한 짓을 다 넣을 수 있겠습니다.
1분 남았습니다. 숨죽이고 캡처 프로그램을 노려봅니다.
알람은 정상작동하나 알림이 미미해 무의미한 알람으로 확인됩니다. 이건 차차 보완해 가면 될 듯합니다.
그런데 등록된 알람 보기 버튼에 문제가 있습니다. 그래서 다시 확인요청했습니다.
나:
C:\Users\qwe\pythonPG>python winALRIMI6.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\qwe\AppData\Local\Programs\Python\Python313\Lib\tkinter\__init__.py", line 2068, in __call__ return self.func(*args) ~~~~~~~~~^^^^^^^ File "C:\Users\qwe\pythonPG\winALRIMI6.py", line 173, in view_scheduled_alarms self.scheduled_alarms_label.config(text="\n".join(scheduled_alarms)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'AlarmApp' object has no attribute 'scheduled_alarms_label'
알람확인 시 발생하는 에러 때문에 다시 요청했습니다.
파친:
AttributeError: 'AlarmApp' object has no attribute 'scheduled_alarms_label' 오류는 self.scheduled_alarms_label 객체가 AlarmApp 클래스에서 정의되지 않았기 때문에 발생한 것입니다. 이 오류를 해결하려면 해당 Label을 클래스 내에서 정의하고 사용할 수 있도록 수정해야 합니다.
아래와 같이 scheduled_alarms_label을 클래스 내에서 정의하고, 그 후 view_scheduled_alarms 메서드에서 이를 참조하도록 수정할 수 있습니다.
왠지 서먹해진 느낌입니다.
주요 수정 내용:
- self.scheduled_alarms_label 라벨을 __init__ 메서드에서 정의하여 알람 목록을 표시할 수 있도록 했습니다.
- view_scheduled_alarms 메서드에서 등록된 알람을 가져와 self.scheduled_alarms_label에 표시하도록 했습니다.
이제 view_scheduled_alarms 메서드가 제대로 작동하고, 알람을 조회할 때 scheduled_alarms_label에 알람 목록을 표시할 수 있을 것입니다.
다정한 모습은 온데간데없습니다.
다시 친해져 보겠습니다.
나:
ChatGPT의 말:
네, 맞습니다! 파친이 여기 있습니다. 😄 지금까지 구현한 알람 프로그램 관련하여 다른 도움이 필요하시면 언제든지 말씀해주세요!
존대가 어색합니다.
다시 소스를 갱신해 누락된 부분이 없는지 재생성합니다.
나:
전체 소스를 보여줘
파친:
여기 전체 소스입니다. 알람 등록, 삭제, 수정, 예약 종료 기능까지 포함된 코드입니다. 윈도 알림과 함께 알람 기능을 관리할 수 있도록 수정한 상태입니다.
테스트
이제 등록된 알람보기에 표기가 되고 있습니다.
사실 위에 등록된 알람 이 있지만 아래의 버튼은 실제 윈도에 등록된 알람을 다시 불러오는 것이라서 등록되었는지 디버깅하기 위한 장치라고 보면 되겠습니다. 정상 작동이 확인되면 아래 등록된 알람 보기 버튼기능은 삭제하도록 하겠습니다.
이로써 확인된 결과가 있습니다.
-주요 확인점-
chatGPT는 문맥의 흐름을 예측해 최선의 방법을 도출해 내는 프로그램이다.
바로 이것입니다.
아무리 chatGPT 가 소스의 중간 부분을 수정해 주고 여기저기 잘못된 점을 지적하더라도 근본인 이 단어에 가장적합한 다음 단어를 도출하는 기능은 전체 문맥을 파악하지 않는 이상 오류를 범하기 쉽다는 것을 몸소 느꼈습니다.
여러분도 느끼셨나요?
에러를 수정해 가는 동안 지속적으로 이상한 결과를 내는 부분은 전체가 아닌 부분을 보는 chatGPT였습니다.
에러 수정 중 큰 역할을 한 것이 바로 소스전체를 다시 한번 살펴봐줘였습니다.
중간에 들어가서 다음 단어를 산출해 내는 chatGPT는 결함을 낼 가능성이 높습니다. 앞의 문맥을 모른 체 뒤만 바라보고 행동하는 것입니다.
이러한 작동원리를 알고 프롬프트를 작성하신다면 chatGPT에 대한 이해도가 상당히 높아지실 것으로 판단됩니다.
이번작업은 좀 길고 어려웠지만 chatGPT를 이해하는데 큰 역할을 한 예제로 보입니다.
야근은 같이해야겠습니다.
ㅡㅜ
나:
알람소리가 너무 적어서 놓치기 쉬운데 개선할 방법 없을까? 알람이 사라지지 않는다거나 특정행위를 일으켜야 한다거나
파친:
1. 알람 소리 강화
winsound.Beep 외에도 pygame 라이브러리나 playsound를 사용하여 더욱 다양한 소리를 선택하거나 반복적인 소리를 사용할 수 있습니다.
2. 알람이 사라지지 않도록 유지하기
알람이 표시되고 일정 시간이 지나면 사라지지 않도록 할 수 있습니다. 이를 위해 알람을 지속적으로 표시하거나 팝업을 남겨두는 방법이 있습니다.
- 팝업 창을 지속적으로 띄우기: tkinter를 이용해서 팝업 창을 띄우고 알람이 끝나지 않도록 할 수 있습니다.
3. 알람을 반복적으로 울리게 하기
알람이 한 번만 울리면 놓칠 수 있기 때문에, 알람이 몇 분마다 반복해서 울리게 할 수 있습니다.
예시:
3. 알람을 반복적으로 울리게 하기
알람이 한 번만 울리면 놓칠 수 있기 때문에, 알람이 몇 분마다 반복해서 울리게 할 수 있습니다.
4. 시스템 작업을 트리거하기
알람이 울릴 때 사용자가 무시할 수 없도록 시스템 작업을 트리거하는 방법도 있습니다. 예를 들어, 화면을 깜빡이게 하거나 특정 프로그램을 실행하거나, 심지어 컴퓨터를 잠그거나 종료하는 방식이 있을 수 있습니다.
5. 스톱워치처럼 카운트다운 추가
알람이 울린 후, 카운트다운 타이머를 띄워서 사용자가 알람을 취소할 때까지 기다리도록 할 수 있습니다. 카운트다운 타이머는 알람을 놓치지 않도록 도와줍니다.
이러한 기능들을 추가하면 알람을 더 강력하게 만들 수 있습니다. 알람을 눈에 띄게 하거나 반복적으로 울리게 하거나 시스템을 활용한 트리거를 이용할 수 있습니다.
제시해 준 것 중 한 개만 적용해 보도록 하겠습니다.
나:
2. 알람이 사라지지 않도록 유지하기를 적용한 소스로 다시 보여줘
뭔가 싸해 다음 버전으로 저장합니다.
역시 에러 발생합니다.
나:
Traceback (most recent call last):
File "C:\Users\qwe\pythonPG\winALRIMI7.py", line 5, in <module>
import pygame
ModuleNotFoundError: No module named 'pygame'
파친:
설치 후 다시 실행하면 정상적으로 동작할 것입니다.
만약 pip install pygame 실행 후에도 문제가 발생하면, 아래 명령어로 pip를 최신 버전으로 업데이트한 후 다시 설치를 시도해보세요.
설치 완료 후 실행하면 알람 소리가 정상적으로 재생될 것입니다! 🎵
테스트
이렇게 회귀하는 모습을 보입니다.
분명 순서대로 진행했을 때는 적용하고 싶은 것들이 구현되었으나 중간에 건드린 것들이 사라지거나 과거버전으로 돌아가는 현상이 보입니다.
그래서 버전관리를 해야 합니다.
아까 말씀드렸듯이 소스가 줄어들거나 이상현상이 느껴지면 버전을 다르게 저장하는 것을 추천드립니다.
그리고 다시 소스를 제시하고 chatGPT에게 내용을 설명해 주면 오히려 버그를 다시 잡아줍니다.
이번만 확인하고 5분 단위로 변경하겠습니다. 잦은 오류로 인해 10분이란 시간은 너무 낭비입니다.
피곤했는지 자고 있나 봅니다.
일단 팝업창에 알람이 뜨는 것은 확인했지만 집요하게 더 고도화하도록 하겠습니다.
이번글은 시리즈로 가야 될 듯합니다.
저도 자야겠습니다.
파친아 수고했다 나도 자러 갈게~!!
다음장에서 뵙겠습니다. 너무 피곤하네요 ㅜㅡ
'IT정보 > AI프로그래밍' 카테고리의 다른 글
엑셀파일에서 이메일을 읽어 자동으로 발송하기 (0) | 2025.03.17 |
---|---|
이메일을 수집해서 엑셀파일로 관리하는 프로그램 (0) | 2025.03.17 |
텍스트와 음성을 특정언어로 변환해주는 프로그램 만들기 (0) | 2025.03.16 |
프린트스크린샷 기능을 단축키로 변경해주는 프로그램 (0) | 2025.03.14 |
내컴퓨터 정보확인하는 프로그램 (0) | 2025.03.14 |