2024春季學期《Python程式設計》大作業
系統說明報告
編制: |
王晨宇(20224074) |
|
審查: |
專 業 |
軟體工程 |
班 級 |
信2205-1 |
目 錄
1專案目的與意義... 3
1.1專案背景說明... 3
1.2專案目的與意義... 3
2 軟體開發環境與技術說明... 3
2.1軟體開發環境... 3
2.2軟體開發技術描述... 3
3系統分析與設計... 5
3.1專案需求分析說明... 5
3.2系統設計方案... 5
4系統原始碼... 6
4.1系統原始碼檔案說明... 6
4.2原始碼... 6
5系統使用說明書... 9
6參考資料... 10
7附件說明... 11
1專案目的與意義
1.1專案背景說明
透過爬取天氣網站的資料以實現特定地區特定時間的天氣 預報,要求介面使用者輸入需要預報的地區位置資訊和需要預報的時間資訊。
要求圖形介面實現。
1.2專案目的與意義
可以獲取全國各地各級城市的天氣預報
2 軟體開發環境與技術說明
2.1軟體開發環境
說明軟體開發環境,包括Java開發環境、Java支援包、資料庫環境等。
Python 3.9 以及requests tkinter等庫
2.2軟體開發技術描述
天氣預報系統可以分為以下功能模組:
- 使用者介面模組:
- 顯示天氣資訊的表格;
- 提供輸入框用於使用者輸入城市名稱;
- 提供按鈕觸發獲取天氣資訊的操作。
- 資料獲取模組:
- 呼叫第三方天氣 API 請求城市天氣資料。
- 資料處理模組:
- 從 API 返回的資料中提取並解析出需要的天氣資訊。
- 資料展示模組:
- 將獲取的天氣資訊展示在使用者介面的表格中。
3系統分析與設計
3.1專案需求分析說明
- 提供一個輸入框,讓使用者輸入要查詢天氣的城市名稱。
- 提供一個按鈕,使用者點選後系統可以獲取並顯示該城市未來5天的天氣資訊。
- 顯示天氣資訊的介面要清晰易讀,包括日期、最高溫度、最低溫度、白天天氣和夜晚天氣等內容
3.2系統設計方案
- 前端介面使用Tkinter庫來構建,定製樣式以美化介面,提高使用者體驗。
- 後端透過呼叫天氣API來獲取城市天氣資訊,可以選擇合適的第三方天氣API服務。
- 資料庫可以選擇使用輕量級的SQLite資料庫,儲存城市資訊和天氣資訊等資料。
- 可以考慮使用Python的Requests庫來處理HTTP請求,獲取API返回的JSON資料,並解析成Python資料結構用於顯示在介面上。
- 在系統設計中考慮錯誤處理和異常情況,例如使用者輸入錯誤的城市名稱或API請求失敗時如何處理。
4系統原始碼
4.1系統原始碼檔案說明
Gui.py 主程式程式碼
4.2原始碼
import requests
import tkinter as tk
from tkinter import ttk
def get_weather_info():
tree.delete(*tree.get_children())
# 清除表格內容
city = city_entry.get()
url = f"https://api.seniverse.com/v3/weather/daily.json?key=【你的key】&location={city}&language=zh-Hans&unit=c&start=-1&days=5" //這裡我用的是心知天氣 高德的那個
response = requests.get(url)
data = response.json()
weather_data = data["results"][0]["daily"]
for day_data in weather_data:
date = day_data["date"]
high_temp = day_data["high"]
low_temp = day_data["low"]
day_weather = day_data["text_day"]
night_weather = day_data["text_night"]
tree.insert("", 'end', values=(date,
high_temp, low_temp, day_weather, night_weather))
# 初始化Tkinter視窗
root = tk.Tk()
root.geometry('800x450+500+500')
root.title("天氣預報系統")
# 設定視窗背景色
root.configure(bg='#f0f0f0')
# 自定義Style
style = ttk.Style()
style.theme_use('clam') # 使用clam主題,你可以根據喜好選擇其他主題
# 調整Treeview的樣式
style.configure("Treeview.Heading", font=('Arial', 12, 'bold'), background="#d9d9d9", foreground="black") # 標題樣式
style.configure("Treeview", font=('Arial', 12), rowheight=30, background="#f0f0f0", fieldbackground="#f0f0f0", foreground="black")
# 輸入框和按鈕的樣式
style.configure("TEntry", font=('Arial', 14)) # 輸入框字型大小
style.configure("TButton", font=('Arial', 14), padding=6) # 按鈕字型大小和內邊距
# 主容器,便於整體佈局
main_frame = ttk.Frame(root, padding="20", style="TFrame", relief="solid", borderwidth=1)
main_frame.grid(row=0, column=0, sticky=tk.NSEW)
# 輸入框和標籤
city_label = ttk.Label(main_frame, text="輸入城市名稱:", style="TLabel")
city_label.pack(pady=(20, 5))
city_entry = ttk.Entry(main_frame, width=20, style="TEntry")
city_entry.pack(ipady=4, pady=5, fill=tk.X)
# 查詢按鈕
fetch_button = ttk.Button(main_frame, text="查詢天氣", command=get_weather_info,
style="TButton")
fetch_button.pack(pady=5)
# Treeview
tree = ttk.Treeview(main_frame, columns=("日期", "最高溫度", "最低溫度", "白天天氣", "夜晚天氣"), show="headings", style="Treeview")
tree.column("日期", width=120, anchor='center')
tree.column("最高溫度", width=100, anchor='center')
tree.column("最低溫度", width=100, anchor='center')
tree.column("白天天氣", width=120, anchor='center')
tree.column("夜晚天氣", width=120, anchor='center')
tree.heading("日期", text="日期")
tree.heading("最高溫度", text="最高溫度")
tree.heading("最低溫度", text="最低溫度")
tree.heading("白天天氣", text="白天天氣")
tree.heading("夜晚天氣", text="夜晚天氣")
tree.pack(pady=20, fill=tk.BOTH, expand=True)
# 視窗和列的權重設定
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
root.mainloop()
5系統使用說明書
1在輸入框中輸入你要查詢的城市
2點選查詢按鈕,會返回近五天的天氣預報
資訊有 :日期,最高溫度,最低溫度,白天天氣,夜晚天氣
6參考資料
最好的 6 個免費天氣 API 介面對比測評_免費天氣api-CSDN部落格
7附件說明