import requests
import sys
from checkCityWeather import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
#原书api已失效
rootPath = "http://t.weather.sojson.com/api/weather/city/"
class demoWin(QMainWindow):
def __init__(self):
super(demoWin, self).__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.checkBtn.clicked.connect(self.queryWeather)
self.ui.clearBtn.clicked.connect(self.ui.resultTextEdit.clear)
def queryWeather(self):
print("* query weather")
cityName = self.ui.cityComboBox.currentText()
cityCode = self.cityToCode(cityName)
print("Checking ", cityName, ', ', cityCode)
req = requests.get(rootPath + str(cityCode))
req.encoding = 'utf-8'
print(req.json())
msgTime = "update Time: " + req.json()["time"]
msgCity = "\nCity: " + req.json()["cityInfo"]["city"]
msgToday = "\nToday temperature: " + req.json()["data"]["forecast"][1]["high"] + ' ' + req.json()["data"]["forecast"][1]["low"]
msgNow = "\nNow: " + req.json()["data"]["wendu"] + "℃"
msgHumidity = "\nHumidty: " + req.json()["data"]["shidu"]
allMsg = msgTime + msgCity + msgToday + msgNow + msgHumidity
self.ui.resultTextEdit.setText(allMsg)
def cityToCode(self, name):
nameDict = {'北京':101010100, '天津':101030100, '上海':101020100}
return nameDict[name]
if __name__ == '__main__':
app = QApplication(sys.argv)
win = demoWin()
win.show()
sys.exit(app.exec_())
'''
{
"time": "2018-09-22 12:37:21",//系统更新时间
"cityInfo": {
"city": "天津市", //请求城市
"cityId": "101030100",//请求ID
"parent": "天津", //上级,一般是省份
"updateTime": "12:32"//天气更新时间
},
"date": "20180922", //当前天气的当天日期
"message": "Success !", //返回message
"status": 200, //返回状态
"data": {
"shidu": "22%", //湿度
"pm25": 15.0, //pm2.5
"pm10": 46.0, //pm10
"quality": "优", //空气质量
"wendu": "24", //温度
"ganmao": "各类人群可自由活动",//感冒提醒(指数)
"forecast": [//今天+未来14天
{
"date": "22",
"ymd": "2018-09-22", //年月日 (新增)
"week": "星期六", //星期 (新增)
"sunrise": "05:57",
"high": "高温 26.0℃",
"low": "低温 15.0℃",
"sunset": "18:10",
"aqi": 55.0,
"fx": "西北风",
"fl": "4-5级",
"type": "晴",
"notice": "愿你拥有比阳光明媚的心情"
},
{
"date": "23",
"ymd": "2018-09-22", //年月日 (新增)
"week": "星期日", //星期 (新增)
"sunrise": "05:58",
"high": "高温 23.0℃",
"low": "低温 14.0℃",
"sunset": "18:09",
"aqi": 29.0,
"fx": "西北风",
"fl": "4-5级",
"type": "晴",
"notice": "愿你拥有比阳光明媚的心情"
},
{
"date": "24",
"ymd": "2018-09-22", //年月日 (新增)
"week": "星期一", //星期 (新增)
"sunrise": "05:59",
"high": "高温 24.0℃",
"low": "低温 15.0℃",
"sunset": "18:07",
"aqi": 25.0,
"fx": "西北风",
"fl": "<3级",
"type": "晴",
"notice": "愿你拥有比阳光明媚的心情"
},
{
"date": "25",
"ymd": "2018-09-22", //年月日 (新增)
"week": "星期二", //星期 (新增)
"sunrise": "06:00",
"high": "高温 24.0℃",
"low": "低温 16.0℃",
"sunset": "18:05",
"aqi": 56.0,
"fx": "西南风",
"fl": "<3级",
"type": "晴",
"notice": "愿你拥有比阳光明媚的心情"
},
{
"date": "26",
"ymd": "2018-09-22", //年月日 (新增)
"week": "星期三", //星期 (新增)
"sunrise": "06:01",
"high": "高温 24.0℃",
"low": "低温 17.0℃",
"sunset": "18:04",
"aqi": 86.0,
"fx": "西南风",
"fl": "3-4级",
"type": "阴",
"notice": "不要被阴云遮挡住好心情"
}
]
}
}'''
UI代码
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:\OneDrive\CS\PyQt\checkCityWeather.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.verticalLayoutWidget = QtWidgets.QWidget(Form)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 381, 281))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.mainLayouy = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.mainLayouy.setContentsMargins(0, 0, 0, 0)
self.mainLayouy.setObjectName("mainLayouy")
self.infoWin = QtWidgets.QGroupBox(self.verticalLayoutWidget)
self.infoWin.setObjectName("infoWin")
self.horizontalLayoutWidget = QtWidgets.QWidget(self.infoWin)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 181, 41))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.selectBar = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.selectBar.setContentsMargins(0, 0, 0, 0)
self.selectBar.setObjectName("selectBar")
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setObjectName("label")
self.selectBar.addWidget(self.label)
self.cityComboBox = QtWidgets.QComboBox(self.horizontalLayoutWidget)
self.cityComboBox.setObjectName("cityComboBox")
self.cityComboBox.addItem("")
self.cityComboBox.addItem("")
self.cityComboBox.addItem("")
self.selectBar.addWidget(self.cityComboBox)
self.resultTextEdit = QtWidgets.QTextEdit(self.infoWin)
self.resultTextEdit.setGeometry(QtCore.QRect(10, 60, 361, 161))
self.resultTextEdit.setObjectName("resultTextEdit")
self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.infoWin)
self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(50, 230, 261, 41))
self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.checkBtn = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
self.checkBtn.setObjectName("checkBtn")
self.horizontalLayout_2.addWidget(self.checkBtn)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.clearBtn = QtWidgets.QPushButton(self.horizontalLayoutWidget_2)
self.clearBtn.setObjectName("clearBtn")
self.horizontalLayout_2.addWidget(self.clearBtn)
self.mainLayouy.addWidget(self.infoWin)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Weather Report"))
self.infoWin.setTitle(_translate("Form", "查询天气"))
self.label.setText(_translate("Form", "选择城市:"))
self.cityComboBox.setItemText(0, _translate("Form", "北京"))
self.cityComboBox.setItemText(1, _translate("Form", "天津"))
self.cityComboBox.setItemText(2, _translate("Form", "上海"))
self.checkBtn.setText(_translate("Form", "Go"))
self.clearBtn.setText(_translate("Form", "Clear"))