날짜별로 메모를 저장하는 프로그램(캘린더)
1. UI 만들기
# 디렉토리 생성하는 함수
def make_dir():
os.makedirs(resource_path("note"), exist_ok = True)
# 해당하는 파일을 읽어서 리턴
def read_memo(filename):
is_file = os.path.isfile(resource_path("note/" + filename))
if not is_file: return []
f = open(resource_path("note/" + filename), 'r')
lines = f.readlines()
f.close()
return lines
def date_change_str(calendar_date):
return calendar_date.toString("yyyy-MM-dd")
# 해당하는 메모 보여주는 함수
def show_memo(input_date):
# text edit에 기존 내용에 있다면 삭제
if UI_MAIN.te_memo: UI_MAIN.te_memo.clear()
filename = date_change_str(input_date) + ".txt"
memos = read_memo(filename)
for memo in memos:
UI_MAIN.te_memo.insertPlainText(memo)
4. 달력위젯을 클릭하면 해당하는 날짜의 노트를 불러온다.
# 파일 저장하는 함수
def save_file(memos, filename):
f = open("note/" + filename, 'w', encoding="UTF8")
f.write(memos)
f.close()
# 메모 저장하는 함수
def save_memo():
# 메모에 저장된 내용 가져오기
memos = UI_MAIN.te_memo.toPlainText()
# 캘린더위젯에 선택된 날짜를 가져와서 파일명 만들기
str_date = UI_MAIN.calendar.selectedDate().toString("yyyy-MM-dd")
filename = str_date + ".txt"
# 파일 저장
save_file(memos, filename)
6. 전체 소스 코드
import sys
import os
from PySide6 import QtUiTools, QtGui
from PySide6.QtWidgets import QApplication, QMainWindow, QCalendarWidget
from datetime import datetime as dt
loader = QtUiTools.QUiLoader()
class MainView(QMainWindow):
def __init__(self):
super().__init__()
self.setupUI()
def setupUI(self):
global UI_MAIN
UI_MAIN = loader.load(resource_path("calendar.ui"))
# 프로그램 실행시 note 폴더 생성
make_dir()
# 오늘 메모 불러오기
today = UI_MAIN.calendar.selectedDate()
show_memo(today)
# 날짜를 선택했을때 이벤트
UI_MAIN.calendar.clicked.connect(show_memo)
# 해당 날짜에 메모 저장하는 이벤트
UI_MAIN.btn_save.clicked.connect(save_memo)
self.setCentralWidget(UI_MAIN)
self.setWindowTitle("날짜별 메모 프로그램")
# self.setWindowIcon(QtGui.QPixmap(resource_path("ani.jpg")))
self.resize(600, 500)
self.show()
# 디렉토리 생성
def make_dir():
os.makedirs(resource_path("note"), exist_ok=True)
# 해당하는 파일을 읽어서 리턴
def read_memo(filename):
is_file = os.path.isfile(resource_path("note/" + filename))
if not is_file: return []
f = open(resource_path("note/" + filename), 'r')
lines = f.readlines()
f.close()
return lines
def date_change_str(calendar_date):
return calendar_date.toString("yyyy-MM-dd")
# 해당하는 메모 보여주는 함수
def show_memo(input_date):
# text edit에 기존 내용에 있다면 삭제
if UI_MAIN.te_memo: UI_MAIN.te_memo.clear()
filename = date_change_str(input_date) + ".txt"
memos = read_memo(filename)
for memo in memos:
UI_MAIN.te_memo.insertPlainText(memo)
# 파일 저장하는 함수
def save_file(memos, filename):
f = open("note/" + filename, 'w', encoding="UTF8")
f.write(memos)
f.close()
# 메모 저장하는 함수
def save_memo():
# 메모에 저장된 내용 가져오기
memos = UI_MAIN.te_memo.toPlainText()
# 캘린더위젯에 선택된 날짜를 가져와서 파일명 만들기
str_date = UI_MAIN.calendar.selectedDate().toString("yyyy-MM-dd")
filename = str_date + ".txt"
# 파일 저장
save_file(memos, filename)
# 파일경로
# pyinstaller로 원파일로 압축할때 경로 필요함
def resource_path(rel_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, rel_path)
return os.path.join(os.path.abspath("."), rel_path)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = MainView()
# main.show()
sys.exit(app.exec())