任務清單-程式碼
2024年12月10日大约 2 分鐘
學習內容:
- 使用 PyQt6 程式載入並連接 UI。
- 設定相關的訊號處理函式
1. 匯入模組
from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox
from PyQt6 import uic
import sysPyQt6.QtWidgets: 包含 PyQt 的核心 GUI 元件,例如QApplication,QWidget,QMessageBox。uic: 用於載入 Qt Designer 生成的.ui文件,快速將 UI 加載到程式中。sys: 提供與 Python 直譯器交互的功能,如獲取命令行參數或退出程式。
2. 主應用類別
class ToDoApp(QWidget):
def __init__(self):
super().__init__()
# 載入 UI
uic.loadUi('todo_app.ui', self)ToDoApp: 繼承自QWidget,表示一個主窗口。super().__init__(): 初始化父類別(QWidget)。uic.loadUi('todo_app.ui', self): 載入先前在 Qt Designer 中設計的界面,並將其應用到這個類別中。
3. 元件功能連接
self.addButton.clicked.connect(self.add_task)
self.deleteButton.clicked.connect(self.delete_task)
self.markCompleteButton.clicked.connect(self.mark_complete)self.addButton.clicked.connect(self.add_task):- 將
Add按鈕的點擊事件(clicked信號)連接到add_task方法。
- 將
- 其他按鈕的功能類似,分別連接到
delete_task和mark_complete方法。
4. 添加任務功能
def add_task(self):
task = self.taskInput.text()
if task.strip():
self.taskList.addItem(task)
self.taskInput.clear()
else:
QMessageBox.warning(self, "Error", "Task cannot be empty")self.taskInput.text(): 獲取輸入框中的文字。task.strip(): 去掉多餘的空白,檢查是否為有效輸入。self.taskList.addItem(task): 將輸入的任務新增到任務列表。self.taskInput.clear(): 清空輸入框,為下一次輸入做準備。QMessageBox.warning: 如果輸入為空,彈出警告對話框,提示用戶不能添加空任務。
5. 刪除任務功能
def delete_task(self):
selected_task = self.taskList.currentItem()
if selected_task:
self.taskList.takeItem(self.taskList.row(selected_task))
else:
QMessageBox.warning(self, "Error", "No task selected")self.taskList.currentItem(): 獲取目前選中的任務項目。self.taskList.row(selected_task): 根據選中項目獲取其所在行數。self.taskList.takeItem(row): 從列表中移除該行的任務。- 如果沒有選中任務,則彈出警告提示「沒有選中任務」。
6. 標記完成功能
def mark_complete(self):
selected_task = self.taskList.currentItem()
if selected_task:
selected_task.setText(f"{selected_task.text()} (Completed)")
else:
QMessageBox.warning(self, "Error", "No task selected")selected_task.setText(): 修改選中任務的文字,將其標記為「已完成」。- 如果沒有選中任務,則彈出警告提示「沒有選中任務」。
7. 主程式啟動
if __name__ == '__main__':
app = QApplication(sys.argv)
window = ToDoApp()
window.show()
sys.exit(app.exec())QApplication: PyQt 程式的主窗口應用對象,負責整個應用的事件迴圈。ToDoApp(): 初始化ToDoApp窗口。window.show(): 顯示主窗口。sys.exit(app.exec()): 啟動應用的事件迴圈並處理退出代碼。
完整程式碼
from PyQt6.QtWidgets import QApplication, QWidget, QMessageBox
from PyQt6 import uic
import sys
class ToDoApp(QWidget):
def __init__(self):
super().__init__()
# 載入 UI
uic.loadUi('todo_app.ui', self)
# 連接功能
self.addButton.clicked.connect(self.add_task)
self.deleteButton.clicked.connect(self.delete_task)
self.markCompleteButton.clicked.connect(self.mark_complete)
def add_task(self):
task = self.taskInput.text()
if task.strip():
self.taskList.addItem(task)
self.taskInput.clear()
else:
QMessageBox.warning(self, "Error", "Task cannot be empty")
def delete_task(self):
selected_task = self.taskList.currentItem()
if selected_task:
self.taskList.takeItem(self.taskList.row(selected_task))
else:
QMessageBox.warning(self, "Error", "No task selected")
def mark_complete(self):
selected_task = self.taskList.currentItem()
if selected_task:
selected_task.setText(f"{selected_task.text()} (Completed)")
else:
QMessageBox.warning(self, "Error", "No task selected")
# 主程式
if __name__ == '__main__':
app = QApplication(sys.argv)
window = ToDoApp()
window.show()
sys.exit(app.exec())練習
試著增加其他功能,例如為任務增加期限,並設提醒功能。
