Python + PyCharm + PyQt5制作天气查询

本文使用python3.8,pycharm Community Edition 2020,pyqt5,示范天气查询系统界面的制作过程

一、安装PyQt5

pip install pyqt5
pip install pyqt5-tools

其中pyqt5-tools为Qt Designer拖拽式的界面设计工具

二、使用Qt Designer设计一个界面

使用External Tools – PyUIC,即可生成Weather.py,实际运行命令如下:

C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\Scripts\pyuic5.exe Ui_Main.ui -o Ui_Main.py

其中,我们需要把两个按钮绑定的槽函数:

self.queryBtn.clicked.connect(self.queryWeather)
self.clearBtn.clicked.connect(self.clearText)

最终的Ui_Main.py内容如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Ui_Main.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(409, 380)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(0, 0, 401, 351))
self.groupBox.setObjectName("groupBox")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(30, 30, 51, 16))
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(self.groupBox)
self.comboBox.setGeometry(QtCore.QRect(70, 30, 69, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.clearBtn = QtWidgets.QPushButton(self.groupBox)
self.clearBtn.setGeometry(QtCore.QRect(30, 280, 75, 23))
self.clearBtn.setObjectName("clearBtn")
self.queryBtn = QtWidgets.QPushButton(self.groupBox)
self.queryBtn.setGeometry(QtCore.QRect(290, 280, 75, 23))
self.queryBtn.setObjectName("queryBtn")
self.now_btn = QtWidgets.QPushButton(self.groupBox)
self.now_btn.setGeometry(QtCore.QRect(280, 20, 75, 23))
self.now_btn.setObjectName("now_btn")
self.textEdit = QtWidgets.QTextEdit(self.groupBox)
self.textEdit.setGeometry(QtCore.QRect(20, 60, 371, 191))
self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 409, 23))
self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "主页面"))
self.groupBox.setTitle(_translate("MainWindow", "城市天气查询"))
self.label.setText(_translate("MainWindow", "城市:"))
self.comboBox.setItemText(0, _translate("MainWindow", "北京"))
self.comboBox.setItemText(1, _translate("MainWindow", "苏州"))
self.comboBox.setItemText(2, _translate("MainWindow", "上海"))
self.comboBox.setItemText(3, _translate("MainWindow", "福州"))
self.clearBtn.setText(_translate("MainWindow", "清空"))
self.queryBtn.setText(_translate("MainWindow", "查询"))
self.now_btn.setText(_translate("MainWindow", "点点点"))

三、调用MainDialog

在MainDialog中调用界面类ManageUI,然后在其中中添加查询天气的业务逻辑代码,这样就做到了界面显示和业务逻辑的分离。创建weathermain.py, 在ManageUI类中定义了两个槽函数queryWeather()和clearText(),以便在界面文件Weather.ui中定义的两个按钮(queryBtn 和clearBtn) 触发clicked 信号与这两个槽函数进行绑定。

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
# from Ui_MainWindow import *
from Ui_Main import Ui_MainWindow
from Ui_caculate import Ui_caculate
from Ui_defect1 import Ui_defect1
from Ui_now import Ui_now
import requests

class ManageUI(QMainWindow, Ui_MainWindow):
def __init__(self):
super(ManageUI, self).__init__()
# 将UI界面布局到ManageUI上;
        self.setupUi(self)
self.queryBtn.clicked.connect(self.queryWeather)
self.clearBtn.clicked.connect(self.clearText)
self.now_btn.clicked.connect(self.now)

# 查询
    def querydata(self):
        cityName = self.comboBox.currentText()
        cityCode = self.getCode(cityName)
        r = requests.get(
"https://restapi.amap.com/v3/weather/weatherInfo?key=f4fd5b287b6d7d51a3c60fee24e42002&city={}".format(
                cityCode))

if r.status_code == 200:
            data = r.json()['lives'][0]
            weatherMsg = '城市:{}\n天气:{}\n温度:{}\n风向:{}\n风力:{}\n湿度:{}\n发布时间:{}\n'.format(
                data['city'],
                data['weather'],
                data['temperature'],
                data['winddirection'],
                data['windpower'],
                data['humidity'],
                data['reporttime'],
            )
else:
            weatherMsg = '天气查询失败,请稍后再试!'
        self.textEdit.setText(weatherMsg)

# 清除
    def cleardata(self):
self.main = clearPage()
self.main.show()
# self.close()

    # 实时
    def now(self):
self.main = nowPage()
self.main.show()
# self.close()
    def queryWeather(self):
        cityName = self.comboBox.currentText()
        cityCode = self.getCode(cityName)
        r = requests.get("https://restapi.amap.com/v3/weather/weatherInfo?key=f4fd5b287b6d7d51a3c60fee24e42002&city={}".format(cityCode))

if r.status_code == 200:
            data = r.json()['lives'][0]
            weatherMsg = '城市:{}\n天气:{}\n温度:{}\n风向:{}\n风力:{}\n湿度:{}\n发布时间:{}\n'.format(
                data['city'],
                data['weather'],
                data['temperature'],
                data['winddirection'],
                data['windpower'],
                data['humidity'],
                data['reporttime'],
            )
else:
            weatherMsg = '天气查询失败,请稍后再试!'
        self.textEdit.setText(weatherMsg)
def getCode(self, cityName):
        cityDict = {"北京": "110000",
                    "苏州": "320500",
                    "福州": "350100",
                    "上海": "310000"}
return cityDict.get(cityName, '101010100')

def clearText(self):
self.textEdit.clear()

class queryPage(QMainWindow, Ui_caculate):
def __init__(self):
super(queryPage, self).__init__()
self.setupUi(self)


class clearPage(QMainWindow, Ui_defect1):
def __init__(self):
super(clearPage, self).__init__()
self.setupUi(self)


class nowPage(QMainWindow, Ui_now):
def __init__(self):
super(nowPage, self).__init__()
self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    weather = ManageUI()
    weather.show()
    sys.exit(app.exec_())

最终效果如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值