renfu
目錄專案簡介技術架構1. 核心技術2. 程式結構分析2.1 主要類別2.2 關鍵功能模組核心功能實現1. 自動更新機制2. 環境變數配置3. 錯誤處理使用者體驗優化部署和打包使用 PyInstaller 打包文件結構未來優化方向總結
標籤
python

使用 PyQt6 開發 Windows 天氣小工具

227次觀看 0收藏 python

使用 PyQt6 開發 Windows 天氣小工具

專案簡介

這是一個使用 Python 和 PyQt6 開發的 Windows 天氣小工具,可以顯示台灣各地即時天氣資訊。專案具有以下特點:

  • 系統托盤整合
  • 自動天氣更新
  • 環境變數配置
  • 使用者友好界面

技術架構

1. 核心技術

主要使用的函式庫

  1. import sys
  2. import os
  3. from dotenv import load_dotenv
  4. import requests
  5. from PyQt6.QtWidgets import  *
  6. from PyQt6.QtCore import Qt, QTimer
  7. from PyQt6.QtGui import QIcon, QAction
  • PyQt6: GUI 框架
  • requests: HTTP 請求
  • python-dotenv: 環境變數管理
  • 中央氣象署 API: 天氣數據來源

2. 程式結構分析

2.1 主要類別

  1. class  WeatherApp(QMainWindow):
  2. def  __init__(self):
  3. super().__init__()
  4. self.init_ui()  # UI 初始化
  5. self.setup_system_tray()  # 系統托盤設置
  6. self.setup_auto_update()  # 自動更新設置

2.2 關鍵功能模組

  1. UI 初始化
    1. def  init_ui(self):
    2. # 視窗設置
    3. self.setWindowTitle("天氣小工具")
    4. self.setGeometry(1200, 100, 300, 200)
    5. # 地區選擇
    6. self.location_combo =  QComboBox()
    7. self.locations =  [...]  # 台灣各地區列表
  1. 系統托盤整合
    1. def  setup_system_tray(self):
    2. self.tray_icon =  QSystemTrayIcon(self)
    3. self.tray_menu =  QMenu()
    4. # 添加托盤選單項目
    5. self.show_action =  QAction("顯示", self)
    6. self.hide_action =  QAction("隱藏", self)
  1. 天氣更新機制
    1. def  get_weather(self):
    2. # API 請求
    3. url =  "https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-C0032-001"
    4. params =  {
    5. "Authorization": self.api_key,
    6. "locationName": location
    7. }
    8. # 數據處理和顯示
    9. # ...

核心功能實現

1. 自動更新機制

  1. def  setup_auto_update(self):
  2. self.update_timer =  QTimer(self)
  3. self.update_timer.timeout.connect(self.get_weather)
  4. self.update_timer.start(30  *  60  *  1000)  # 30分鐘更新

2. 環境變數配置

  1. # .env 文件
  2. CWA_API_KEY=your-api-key-here
  3. # 程式中載入
  4. load_dotenv()
  5. self.api_key = os.getenv('CWA_API_KEY')

3. 錯誤處理

  1. try:
  2. response = requests.get(url, params=params)
  3. data = response.json()
  4. # 處理數據
  5. except Exception as e:
  6. QMessageBox.warning(self, "錯誤", str(e))

使用者體驗優化

  1. 系統托盤整合
  • 最小化到托盤
  • 右鍵選單操作
  • 狀態提示
  • 界面設計
  • 簡潔的布局
  • 清晰的天氣信息顯示
  • 即時更新提示
  • 操作便利性
  • 快速切換地區
  • 自動更新天氣
  • 記住上次選擇

部署和打包

使用 PyInstaller 打包

  1. pyinstaller  --noconsole  --onefile  --icon=icons/app_icon.ico  --add-data  ".env;."  weather_app.py

文件結構

  1. weather_app/
  2. ├── weather_app.py
  3. ├── .env
  4. ├── icons/
  5.  ├── app_icon.ico
  6.  └── weather_icons/
  7. └── requirements.txt

未來優化方向

  1. 功能擴展
  • 添加天氣預警通知
  • 支援更多天氣數據顯示
  • 自定義更新頻率
  • 性能優化
  • 緩存天氣數據
  • 優化網絡請求
  • 減少資源佔用
  • 界面優化
  • 支援深色模式
  • 自定義主題
  • 更豐富的視覺效果

總結

這個專案展示了如何使用 PyQt6 開發一個實用的桌面應用程式。通過合理的架構設計和功能實現,創建了一個既實用又易用的天氣小工具。關鍵技術點包括:

  1. PyQt6 GUI 開發
  • 系統托盤應用開發
  • API 整合
  • 環境變數管理
  • 錯誤處理機制

這個專案可以作為 PyQt6 桌面應用開發的參考範例,特別是在系統托盤應用和天氣資訊顯示方面。