응용프로그램 개발연습

Siwoo Pak·2024년 2월 29일
0

날짜별로 메모를 저장하는 프로그램(캘린더)
1. UI 만들기

  • 맥으로 만든 UI
  1. 프로그램이 실행되면 파이썬 프로그램이 있는 위치에 note 폴더를 만든다.
# 디렉토리 생성하는 함수
def make_dir():
    os.makedirs(resource_path("note"), exist_ok = True)
  1. 프로그램이 실행되면 오늘 날짜에 해당하는 노트를 note폴더에서 불러온다.
# 해당하는 파일을 읽어서 리턴
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. 달력위젯을 클릭하면 해당하는 날짜의 노트를 불러온다.

  • 위의 코드로 동시에 해결
  1. 노트에 내용을 입력하고 저장하면 그 날짜에 해당하는 파일 이름의 txt파일이 note폴더에 저장된다.
# 파일 저장하는 함수
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())
profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글