城市天气预报.py程序可通过QT6可视化窗口获取用户输入的城市名,查询输入城市未来一周的天气预报数据,再显示输出,如查询无结果,请添加家乡的城市代码进行查询。
时间: 2023-07-15 18:10:54 浏览: 168
qt获取天气信息,支持输入城市查看
5星 · 资源好评率100%
好的,具体实现方法如下:
1. 首先,需要安装 PyQt6 库,可通过 pip install PyQt6 进行安装。
2. 创建一个 PyQt6 可视化窗口,包含一个文本框用于输入城市名,一个按钮用于触发查询天气预报的操作,以及一个输出框用于显示查询结果。
3. 在按钮的点击事件中,获取用户输入的城市名,调用天气预报 API 查询该城市未来一周的天气预报数据,并将结果显示在输出框中。
4. 如果查询结果为空,则再次调用天气预报 API,查询家乡的城市代码进行查询。
下面是代码示例:
```python
import sys
import requests
from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QTextEdit
class WeatherWidget(QWidget):
def __init__(self):
super().__init__()
self.city_code = {
"北京": "101010100",
"上海": "101020100",
"广州": "101280101",
"深圳": "101280601",
"杭州": "101210101",
"南京": "101190101",
"武汉": "101200101",
"成都": "101270101",
"重庆": "101040100"
} # 家乡城市代码
self.initUI()
def initUI(self):
# 创建控件
city_label = QLabel("城市名:")
self.city_edit = QLineEdit()
self.search_button = QPushButton("查询")
self.result_edit = QTextEdit()
# 布局控件
h_layout = QHBoxLayout()
h_layout.addWidget(city_label)
h_layout.addWidget(self.city_edit)
h_layout.addWidget(self.search_button)
v_layout = QVBoxLayout()
v_layout.addLayout(h_layout)
v_layout.addWidget(self.result_edit)
self.setLayout(v_layout)
# 绑定事件
self.search_button.clicked.connect(self.searchWeather)
# 设置窗口属性
self.setWindowTitle("天气预报")
self.resize(400, 300)
def searchWeather(self):
city = self.city_edit.text().strip()
if not city:
self.result_edit.setText("请输入城市名")
return
if city in self.city_code:
city_code = self.city_code[city]
else:
self.result_edit.setText("查询无结果")
return
url = f"http://t.weather.itboy.net/api/weather/city/{city_code}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if data["status"] == 200:
weather_data = data["data"]["forecast"]
text = ""
for item in weather_data:
text += f"{item['date']} {item['week']} {item['type']} {item['low']}-{item['high']}℃\n"
self.result_edit.setText(text)
else:
self.result_edit.setText("查询失败")
else:
self.result_edit.setText("查询失败")
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = WeatherWidget()
widget.show()
sys.exit(app.exec())
```
在代码中,我们定义了一个城市代码字典 `city_code`,通过用户输入的城市名获取对应的城市代码,如果查询不到结果,则通过字典查询家乡城市代码进行查询。查询天气预报数据的 API 来自于 http://t.weather.itboy.net/,这个 API 可以免费使用,但是数据可能不是特别准确,建议使用时注意。
阅读全文