一:PyQt5实践《做一个天气预报的查询》内附源码

这里获取数据是从中国天气官方网址获取的。本实验的代码下载:博主github地址

第一步: 设计界面,我们这里直接用Qtdesign设计。

                             为了大家比较容易设置,我们这里在把对象查看器中的内容贴出来

                              简单的几个组件:一个窗口+两个按钮+一个下拉是的盒子+一个标签+一个返回文本显示的内容

第二步:将ui文件转换为py文件

  •        pyuic  -o  WeatherWin.py  WeatherWin.ui

  下面是转换后的py文件

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

# Form implementation generated from reading ui file 'WeatherWin.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

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(554, 396)
        self.clearBtn = QtWidgets.QPushButton(Form)
        self.clearBtn.setGeometry(QtCore.QRect(320, 320, 75, 23))
        self.clearBtn.setObjectName("clearBtn")
        self.groupBox = QtWidgets.QGroupBox(Form)
        self.groupBox.setGeometry(QtCore.QRect(60, 30, 421, 251))
        self.groupBox.setObjectName("groupBox")
        self.label = QtWidgets.QLabel(self.groupBox)
        self.label.setGeometry(QtCore.QRect(80, 39, 51, 21))
        self.label.setObjectName("label")
        self.weatherComboBox = QtWidgets.QComboBox(self.groupBox)
        self.weatherComboBox.setGeometry(QtCore.QRect(140, 40, 221, 22))
        self.weatherComboBox.setObjectName("weatherComboBox")
        self.weatherComboBox.addItem("")
        self.weatherComboBox.addItem("")
        self.weatherComboBox.addItem("")
        self.weatherComboBox.addItem("")
        self.resultText = QtWidgets.QTextEdit(self.groupBox)
        self.resultText.setGeometry(QtCore.QRect(70, 100, 291, 131))
        self.resultText.setObjectName("resultText")
        self.queryBtn = QtWidgets.QPushButton(Form)
        self.queryBtn.setGeometry(QtCore.QRect(150, 320, 75, 23))
        self.queryBtn.setObjectName("queryBtn")

        self.retranslateUi(Form)

        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.clearBtn.setText(_translate("Form", "清空"))
        self.groupBox.setTitle(_translate("Form", "查询城市天气"))
        self.label.setText(_translate("Form", "城市"))
        self.weatherComboBox.setItemText(0, _translate("Form", "北京"))
        self.weatherComboBox.setItemText(1, _translate("Form", "西安"))
        self.weatherComboBox.setItemText(2, _translate("Form", "上海"))
        self.weatherComboBox.setItemText(3, _translate("Form", "天津"))
        self.queryBtn.setText(_translate("Form", "查询"))

第三步: 数据传递

      第二步只是将界面绘制了出来并转换为py文件,接着我们会使用requests模块对网站发起请求,获取我们想要的数据,并显示到我们的窗口中。

     首先我们试着访问一下该网址:http://www.weather.com.cn/data/sk/101010100.html  这个查的是北京的天气,是一个json格式的数据,而且还乱码了,没关系,我们等会改成utf-8就好了。 每个城市之间只是那红色的城市代码不同。 我这里只找了北京,天津,西安,上海的城市代码。所以只能查这些地区。。  如果想找你所在的城市,去网上找一下。

            这是我在网上随便找的。

           我们可以构造查询了连接,然后用requests进行请求。 返回json格式的数据,我们一步一步提取出来就可以了。 下面是调用的文件。

import sys
from PyQt5.QtWidgets import *
from WeatherWin import Ui_Form
import requests

class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.ui.clearBtn.clicked.connect(self.clearResult)
        self.ui.queryBtn.clicked.connect(self.queryWeather)
    def queryWeather(self):

        print('* queryWeather')
        cityName = self.ui.weatherComboBox.currentText()
        cityCode = self.transCityName(cityName)
        web = 'http://www.weather.com.cn/data/sk/' + cityCode + '.html'
        rep = requests.get(web)
        rep.encoding = 'utf-8'
        # print(rep.json())

        msg1 = '城市: %s' % rep.json()['weatherinfo']['city'] + '\n'
        msg2 = '风向: %s' % rep.json()['weatherinfo']['WD'] + '\n'
        msg3 = '温度: %s' % rep.json()['weatherinfo']['temp'] + '\n'
        msg***力: %s' % rep.json()['weatherinfo']['WS'] + '\n' + '度'
        msg5 = '湿度: %s' % rep.json()['weatherinfo']['SD'] + '\n'
        result = msg1 + msg2 + msg3 + msg4 + msg5
        self.ui.resultText.setText(result)

    def transCityName(self, cityName):
        cityCode = ''

        if cityName == '北京':
            cityCode = '101010100'
        elif cityName == '天津':
            cityCode = '101030100'
        elif cityName == '上海':
            cityCode = '101020100'
        elif cityName == '西安':
            cityCode = '101110101'

        return cityCode

    def clearResult(self):
        print('* clearResult')
        self.ui.resultText.clear()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    win = MainWindow()
    win.setObjectName("MainWindow")  # 为主窗口设置对象名 为了在下面设置背景颜色  
    win.setStyleSheet("#MainWindow{border-image:url(./images/python.jpg);}")  # 这个图片路径是我自己的,你可以这一张你自己的图片。或者把这两行都给注释掉
    win.show()
    sys.exit(app.exec_())

最后的界面:

 

 背景是乱加的。。 大家可以自己加好看的背景。 

看一下功能

  有个下拉框  可以选择城市,然后点击查询就可以查到了。

 

 

 

全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
04-08 10:36
已编辑
华南理工大学 C++
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-29 22:21
Offer1:小马智行,深圳,测试开发工程师,17.0k*16.0,Offer2:追觅科技,深圳,嵌入式工程师,18.0k*15.0,
嵌软狗都不学:各位base深圳的同事,作为也是并肩作战的一员,今天想站在管理视角,和大家开诚布公地聊一聊:从近几个月的上下班数据对比看来,我们发现一个明显的差异:深圳同事的在岗时间普遍比苏州同事短。很多深圳同事早上9点之后才到公司,晚上不到 20 点就下班了;而总部那边,20点半甚至 22 点后还有不少同事在办公室忙碌,特别是研发团队,加班更是常态。相信去过苏州的同事,对这种场景都不陌生。我很好奇,这是因为苏州工作任务太重还是咱们深圳同事效率真的高到能在更短时间内完成工作?MOVA在深圳成立分公司是为了吸引更优秀的人才贡献更多更高质的价值,公司管理层给我反馈的是深圳招到的多是行业的专家大拿,大部分都是薪资比苏州高的,而且我们办公的租金等也远高于苏州的..MOVA虽脱胎于强壮的集团母体不久,各业务板块尚未实现全面盈利,虽说公司管理层目光长远,不纠结当下的人才投入,但行业内的普遍标准是,员工创造的价值要达到公司雇佣成本的 15 倍以上。大家不妨自我审视一下,自己是否达到了这个标准?如果是抱着划水、按时打卡走人拿毛爷爷的心态那不适合来MOVA,那样过下去不但自己过得尴尬也会影响MOVA这个大船的攻城略地的速度.我并非鼓励大家盲目加班,而是倡导高效工作,拒绝无效忙碌,不要让项目进度因低效受影响,也别把精力浪费在和苏州同事拼打卡时长上,提倡更高的人效比;考虑到两地地域和交通差异,相信大家会找最适合自己发挥的工作方式(比如按时下班后1小时到家晚饭后继续未竟工作等..)大家在遵守公司规章的情况下尽情地体现自己的能力价值,为MOV!和深圳公司争光我们在这边才能更安心更有信心的工作下去;请客BU长、名部门长、项目管理和各业务单元负责人,全面梳理团队情况,及时评估成员工作负荷与成果质量,坚决清退划水害虫痕疫,践行公司价值观,相互监督,防止管理漏洞及渎职。感谢人家的理解,也请人家多担待我的直言不讳……
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务