效果预览:
一、获取天气信息 使用python获取天气有两种方式。
1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容。 2)另一种方式是根据天气预报网站提供的API,直接获取结构化数据,省去了解析HTML页面的步骤。 本例使用的是第二种方式,请求地址为:http://wthrcdn.etouch.cn/weather_mini?citykey=城市代码 部分城市代码对应:北京 101010100 天津 101030100 上海 101020100 浏览器返回的天津气温情况如下,该信息其实就是一个JSON字符串,格式化之后的样子如下所示: { "data": { "yesterday": { "date": "1日星期五", "high": "高温 17℃", "fx": "东北风", "low": "低温 8℃", "fl": "<![CDATA[<3级]]>", "type": "多云" }, "city": "北京", "forecast": [ { "date": "2日星期六", "high": "高温 14℃", "fengli": "<![CDATA[<3级]]>", "low": "低温 8℃", "fengxiang": "北风", "type": "小雨" }, ], "ganmao": "昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。", "wendu": "12" }, "status": 1000, "desc": "OK" } 获取天气的主要代码如下: # cityCode 替换为具体某一个城市的对应编号# 1、发送请求,获取数据 url = f'http://wthrcdn.etouch.cn/weather_mini?citykey={cityCode}' res = requests.get(url) res.encoding = 'utf-8'res_json = res.json() # 2、数据格式化 data = res_json['data'] city = f"城市:{data['city']} " # 字符串格式化的一种方式 f"{}" 通过字典传递值 today = data['forecast'][0] date = f"日期:{today['date']} " # 换行 now = f"实时温度:{data['wendu']}度 " temperature = f"温度:{today['high']} {today['low']} " fengxiang = f"风向:{today['fengxiang']} " type = f"天气:{today['type']} " tips = f"贴士:{data['ganmao']} " result = city + date + now + temperature + fengxiang + type + tips print(result) 二、界面的实现 1、使用Qt Designer绘制窗口,保存为ui文件
2、把ui文件转为py文件 1)在生成的ui文件目录下,打开cmd2)输入以下命令(注意替换名称) pyuic5 -o destination.py source.ui 3、信号与槽函数的连接 # 1、清空按钮与对应函数连接 clearBtn.clicked.connect(widget.clearResult) # 2、查询按钮与对应函数连接 queryBtn.clicked.connect(widget.queryWeather) 4、调用主窗口类 import sys from PyQt5.QtWidgets import QApplication , QMainWindow from WeatherWin import Ui_widget import requests import json class MainWindow(QMainWindow ): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.ui = Ui_widget() self.ui.setupUi(self) # 通过文本框传入想要搜索的城市名称:天津 cityName = self.ui.weatherComboBox.currentText() # 获取天气部分省略 # 在文本框显示查询结果 self.ui.resultText.setText(result) def clearResult(self): print('* clearResult ') self.ui.resultText.clear() if __name__=="__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_()) 以上,提供了获取天气(GUI)程序的主要过程及部分源码。1、获取天气信息 2、绘制可视化界面 3、把ui文件转成py文件 4、信号与槽 5、调用主窗口类

效果预览:

一、获取天气信息

使用python获取天气有两种方式。

1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容。

2)另一种方式是根据天气预报网站提供的API,直接获取结构化数据,省去了解析HTML页面的步骤。

本例使用的是第二种方式,请求地址为:http://wthrcdn.etouch.cn/weather_mini?citykey=城市代码

部分城市代码对应:

北京 101010100

天津 101030100

上海 101020100

浏览器返回的天津气温情况如下,该信息其实就是一个JSON字符串,格式化之后的样子如下所示:

  1. {    "data": {        "yesterday": {            "date": "1日星期五",            "high": "高温 17℃",            "fx": "东北风",            "low": "低温 8℃",            "fl": "<![CDATA[<3级]]>",            "type": "多云"        },        "city": "北京",        "forecast": [            {                "date": "2日星期六",                "high": "高温 14℃",                "fengli": "<![CDATA[<3级]]>",                "low": "低温 8℃",                "fengxiang": "北风",                "type": "小雨"            },
  2.  
  3.         ],        "ganmao": "昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。",        "wendu": "12"    },    "status": 1000,    "desc": "OK"}

获取天气的主要代码如下:

  1. # cityCode 替换为具体某一个城市的对应编号]date = f"日期:{today['date']}"  #  换行now = f"实时温度:{data['wendu']}度"temperature = f"温度:{today['high']} {today['low']}"fengxiang = f"风向:{today['fengxiang']}"type = f"天气:{today['type']}"tips = f"贴士:{data['ganmao']}"
  2.  
  3. result = city + date + now + temperature + fengxiang + type + tips
  4.  
  5. print(result)
  1.  

二、界面的实现

1、使用Qt Designer绘制窗口,保存为ui文件

2、把ui文件转为py文件

1)在生成的ui文件目录下,打开cmd2)输入以下命令(注意替换名称)

  1. pyuic5 -o destination.py source.ui

3、信号与槽函数的连接

  1. # 1、清空按钮与对应函数连接clearBtn.clicked.connect(widget.clearResult)
  2.  
  3. # 2、查询按钮与对应函数连接queryBtn.clicked.connect(widget.queryWeather)

4、调用主窗口类

  1. import sys     from PyQt5.QtWidgets import QApplication , QMainWindowfrom WeatherWin import Ui_widgetimport requestsimport json
  2.  
  3. class MainWindow(QMainWindow ):    def __init__(self, parent=None):            super(MainWindow, self).__init__(parent)        self.ui = Ui_widget()        self.ui.setupUi(self)
  4.  
  5.         # 通过文本框传入想要搜索的城市名称:天津        cityName = self.ui.weatherComboBox.currentText()
  6.  
  7.         # 获取天气部分省略
  8.  
  9.         # 在文本框显示查询结果        self.ui.resultText.setText(result)
  10.  
  11.     def clearResult(self):        print('* clearResult  ')        self.ui.resultText.clear()  
  12.  
  13. if __name__=="__main__":      app = QApplication(sys.argv)      win = MainWindow()      win.show()      sys.exit(app.exec_()) 

以上,提供了获取天气(GUI)程序的主要过程及部分源码。

1、获取天气信息

2、绘制可视化界面

3、把ui文件转成py文件

4、信号与槽

5、调用主窗口类

用 Python 编写一个天气查询应用的更多相关文章

  1. 用 Python 编写一个天气查询应用 pyqt5

    ​ 效果预览: !   ​ 一.获取天气信息 使用python获取天气有两种方式. 1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容. 2)另一种 ...

  2. 基于python编写的天气抓取程序

    以前一直使用中国天气网的天气预报组件都挺好,可是自从他们升级组件后数据加载变得非常不稳定,因为JS的阻塞常常导致网站打开速度很慢.为了解决这个问题决定现学现用python编写一个抓取程序,每天定时抓取 ...

  3. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  4. 使用 python 编写一个授权登录验证的模块

    使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...

  5. Python 爬虫实现天气查询(可视化界面版)

    github项目地址:StarMan Python 实现天气查询的程序早已完成,近日开学无课,昨晚心血来潮想做一个较为友好的界面版本,便匆忙行动了起来. 在之前已有的程序的基础上使用Tkinter 模 ...

  6. Python学习笔记——天气查询代码

    天气查询代码1 # 此程序无法运行,因为中国天气网的api接口被关闭了 import urllib.request import json import pickle #建立城市字典 pickle_f ...

  7. Python 编写一个有道翻译的 workflow 教程

    最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...

  8. 如何用Python编写一个聊天室

    一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...

  9. 为Python编写一个简单的C语言扩展模块

    最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...

随机推荐

  1. 笔记-爬虫部署及运行工具-scrapydweb

    笔记-爬虫部署及运行工具-scrapydweb 1.      简介 scrapyd是爬虫部署工具,但它的ui比较简单,使用不是很方便. scrapydweb以scrapyd为基础,增加了ui界面和监 ...

  2. MySQL之可视化软件

    MySQL可视化客户端 多款可视化界面,总有一款适合你 个人推荐使用MySQL官方提供的可视化工具. 下载链接 使用方法链接

  3. 3D_solarSys

    计算机图形学_3DsolarSys 一.软件功能        1.实现3D太阳系,有太阳.土星.土星环.地球.月球.天王星.海王星.火星.其中土星.地球.天王星.海王星.火星绕着太阳转,土星环绕着土 ...

  4. 获取一个元素距离顶部的位置和window的滚动值

    获取一个元素距离顶部的位置: $(".box").offset().top; 获取window的滚动值: $(window).scrollTop();

  5. IDEA导入 Eclipse项目

    选址 import 导入项目,选择create..., 下一步...下一步 导入项目后: 点击config 点击OK 然后添加artifacts 即可运行项目. IDEA 添加artifacts 方法 ...

  6. Vue源码(下篇)

    上一篇是mount之前的添加一些方法,包括全局方法gloal-api,XXXMixin,initXXX,然后一切准备就绪,来到了mount阶段,这个阶段主要是 解析template 创建watcher ...

  7. 「luogu1613」跑路

    传送门 Luogu 解题思路 对于所有可以用 \(2^k\) 形式表示的 \(dis(i,j)\),将\(i,j\)之间的 \(dis\) 置为 \(1\),可以用倍增 \(\text{Floyd}\ ...

  8. JetBrains IntelliJ IDEA(IJ)v2019.3.3/3.1/3.2/3.4/3.5 for mac/windows/linux 详细安装破解教程

    手欠升级了IntelliJ IDEA到2019.3.3,原来的破解不可用,IntelliJ IDEA 2019.3.3破解办法如下,为方便自己使用记录下.======================= ...

  9. gerrit关闭管理员权限后解决办法

    问题描述:gerrit以管理员的身份登录后,create new list和 create new group不显示,导致无法创建新的项目和权限组 出现问题:gerrit可视化页面误删all_proj ...

  10. 【Python数组及其基础操作】【numpy ndarray】

    一.创建数组 在python中创建数组最简单的办法就是使用array函数.它接受一切序列型的对象,然后产生一个含有传入数据的numpy数组.其中,嵌套序列(比如由一组等长列表组成的列表)会被转换为一个 ...