PyQt5로 프로젝트 작업 및 마감일 관리와 시각화 데스크탑 애플리케이션 개발하기
Overview
PyQt5는 파이썬에서 Qt 프레임워크를 사용할 수 있게 해주는 라이브러리로, 강력한 GUI 애플리케이션을 만드는 데 유용합니다. 이 문서에서는 PyQt5를 사용하여 프로젝트 작업과 마감일을 관리하고 시각화하는 데스크탑 애플리케이션을 개발하는 방법을 자세히 설명하겠습니다. 이 애플리케이션은 작업을 추가하고, 마감일을 설정하며, 작업 목록을 시각적으로 표시할 수 있어야 합니다.
1. PyQt5 설치 및 환경 설정
PyQt5 설치
먼저, PyQt5를 설치해야 합니다. PyQt5는 PyPI에 있으므로, pip
명령어로 간편하게 설치할 수 있습니다.
pip install pyqt5
설치가 완료되면, 기본적인 PyQt5 애플리케이션을 실행할 준비가 된 것입니다.
2. 기본 애플리케이션 구조
애플리케이션 초기화
PyQt5 애플리케이션을 만들기 위해서는 QApplication
클래스와 QWidget
클래스를 활용합니다. 다음은 기본 애플리케이션을 설정하는 코드 예시입니다.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Task Manager')
self.setGeometry(100, 100, 800, 600)
# 메인 레이아웃 및 버튼 추가
layout = QVBoxLayout()
button = QPushButton('Click Me')
layout.addWidget(button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
코드 설명
QApplication
은 PyQt5 애플리케이션의 인스턴스를 생성합니다.QMainWindow
는 기본 윈도우 클래스로, 메뉴, 툴바, 상태바 등 다양한 기능을 제공하는 윈도우입니다.QVBoxLayout
은 수직 방향으로 위젯을 배치하는 레이아웃입니다.QPushButton
은 클릭 가능한 버튼입니다.
3. 프로젝트 작업 및 마감일 관리
작업 목록 관리
작업 목록을 관리하려면 데이터를 저장하고 조작할 수 있는 구조가 필요합니다. 이를 위해 Python의 list
또는 dict
를 사용할 수 있습니다. 예를 들어, 작업을 dict
로 저장할 수 있습니다.
self.tasks = {
'Task 1': {'deadline': '2024-09-01', 'status': 'Incomplete'},
'Task 2': {'deadline': '2024-10-15', 'status': 'Incomplete'}
}
작업 추가 및 제거
작업을 추가하거나 제거하려면, 버튼 클릭 이벤트를 처리하는 핸들러를 작성해야 합니다.
from PyQt5.QtWidgets import QLineEdit, QDateEdit
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.tasks = {}
self.setWindowTitle('Task Manager')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
# Task input fields
self.task_input = QLineEdit()
self.date_input = QDateEdit()
self.date_input.setCalendarPopup(True)
add_button = QPushButton('Add Task')
add_button.clicked.connect(self.add_task)
layout.addWidget(self.task_input)
layout.addWidget(self.date_input)
layout.addWidget(add_button)
self.task_list = QTextEdit()
layout.addWidget(self.task_list)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def add_task(self):
task_name = self.task_input.text()
deadline = self.date_input.date().toString('yyyy-MM-dd')
if task_name and deadline:
self.tasks[task_name] = {'deadline': deadline, 'status': 'Incomplete'}
self.update_task_list()
self.task_input.clear()
else:
print("Please enter task name and deadline.")
def update_task_list(self):
self.task_list.clear()
for task, details in self.tasks.items():
self.task_list.append(f"Task: {task}, Deadline: {details['deadline']}, Status: {details['status']}")
코드 설명
QLineEdit
는 사용자로부터 텍스트를 입력받는 위젯입니다.QDateEdit
는 날짜를 선택할 수 있는 위젯입니다.QTextEdit
는 다중 줄 텍스트를 표시할 수 있는 위젯입니다.add_task
메서드는 작업을 추가하고 리스트를 업데이트합니다.update_task_list
메서드는 작업 목록을QTextEdit
에 업데이트합니다.
4. 작업 시각화
작업을 시각화하려면 그래픽적인 표현이 필요합니다. PyQt5의 QGraphicsView
와 QGraphicsScene
을 사용하여 작업을 시각적으로 표시할 수 있습니다.
Gantt 차트 예제
Gantt 차트는 프로젝트 관리에서 작업과 일정을 시각화하는 데 유용합니다. 간단한 Gantt 차트를 PyQt5로 구현할 수 있습니다.
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QGraphicsRectItem
from PyQt5.QtCore import QRectF
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.tasks = {}
self.setWindowTitle('Task Manager')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.task_input = QLineEdit()
self.date_input = QDateEdit()
self.date_input.setCalendarPopup(True)
add_button = QPushButton('Add Task')
add_button.clicked.connect(self.add_task)
layout.addWidget(self.task_input)
layout.addWidget(self.date_input)
layout.addWidget(add_button)
# Gantt chart view
self.gantt_view = QGraphicsView()
self.gantt_scene = QGraphicsScene()
self.gantt_view.setScene(self.gantt_scene)
layout.addWidget(self.gantt_view)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def add_task(self):
task_name = self.task_input.text()
deadline = self.date_input.date().toString('yyyy-MM-dd')
if task_name and deadline:
self.tasks[task_name] = {'deadline': deadline, 'status': 'Incomplete'}
self.update_gantt_chart()
self.task_input.clear()
else:
print("Please enter task name and deadline.")
def update_gantt_chart(self):
self.gantt_scene.clear()
y = 0
for task, details in self.tasks.items():
rect = QGraphicsRectItem(0, y, 200, 30)
rect.setBrush(Qt.blue)
self.gantt_scene.addItem(rect)
y += 40
코드 설명
QGraphicsView
와QGraphicsScene
은 2D 그래픽을 표시할 수 있는 위젯입니다.QGraphicsRectItem
은 사각형을 그리는 그래픽 항목입니다.update_gantt_chart
메서드는 Gantt 차트를 업데이트합니다.
5. 데이터 저장 및 로드
작업 데이터를 파일에 저장하고 불러오는 기능도 추가할 수 있습니다. JSON 파일을 사용하여 간단하게 저장할 수 있습니다.
import json
class MyApp(QMainWindow):
def __init__(self):
super().__init__()
self.tasks = {}
self.setWindowTitle('Task Manager')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.task_input = QLineEdit()
self.date_input = QDateEdit()
self.date_input.setCalendarPopup(True)
add_button = QPushButton('Add Task')
add_button.clicked.connect(self.add_task)
layout.addWidget(self.task_input)
layout.addWidget(self.date_input)
layout.addWidget(add_button)
save_button = QPushButton('Save Tasks')
save_button.clicked.connect(self.save_tasks)
load_button = QPushButton('Load Tasks')
load_button.clicked.connect(self.load_tasks)
layout.addWidget(save_button)
layout.addWidget(load_button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def save_tasks(self):
with open('tasks.json', 'w') as file:
json.dump(self.tasks, file)
def load_tasks(self):
try:
with open('tasks.json', 'r') as file:
self.tasks = json.load(file)
self.update_task_list()
except FileNotFoundError:
print("No saved tasks found.")
코드 설명
save_tasks
메서드는 현재 작업 목록을 JSON 파일로 저장합니다.- `
'Study Information Technology' 카테고리의 다른 글
소셜 미디어 대시보드 다양한 플랫폼의 게시물 통합 및 표시 (1) | 2024.09.02 |
---|---|
효율적인 시간 관리 도구 구현하기 업무 여가 개인 작업의 균형 맞추기 (5) | 2024.09.02 |
심해 탐사를 위한 수중 로봇 제작 가이드 (1) | 2024.09.02 |
레시피 추천 도구 만들기 재료와 식이 제한에 따른 식사 제안 (4) | 2024.09.02 |
정밀 수술을 위한 로봇 시스템 설계 실시간 피드백 및 제어 (3) | 2024.09.01 |