用 Python 编写一个天气查询应用 pyqt5
效果预览:
!
一、获取天气信息
使用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文件目录下,打开cmd
2)输入以下命令(注意替换名称)
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字符串,格式化之后的样子如下所示:
- { "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 替换为具体某一个城市的对应编号]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 , QMainWindowfrom WeatherWin import Ui_widgetimport requestsimport 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 编写一个天气查询应用 pyqt5的更多相关文章
- 用 Python 编写一个天气查询应用
效果预览: 一.获取天气信息 使用python获取天气有两种方式. 1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容. 2)另一种方式是根据天气预 ...
- 基于python编写的天气抓取程序
以前一直使用中国天气网的天气预报组件都挺好,可是自从他们升级组件后数据加载变得非常不稳定,因为JS的阻塞常常导致网站打开速度很慢.为了解决这个问题决定现学现用python编写一个抓取程序,每天定时抓取 ...
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
- Python 爬虫实现天气查询(可视化界面版)
github项目地址:StarMan Python 实现天气查询的程序早已完成,近日开学无课,昨晚心血来潮想做一个较为友好的界面版本,便匆忙行动了起来. 在之前已有的程序的基础上使用Tkinter 模 ...
- Python学习笔记——天气查询代码
天气查询代码1 # 此程序无法运行,因为中国天气网的api接口被关闭了 import urllib.request import json import pickle #建立城市字典 pickle_f ...
- Python 编写一个有道翻译的 workflow 教程
最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...
- 如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
- 为Python编写一个简单的C语言扩展模块
最近在看pytorh方面的东西,不得不承认现在这个东西比较火,有些小好奇,下载了代码发现其中计算部分基本都是C++写的,这真是要我对这个所谓Python语音编写的框架或者说是库感觉到一丢丢的小失落,细 ...
随机推荐
- UniGUI 之UniDBGrid(05)
UniGUI 之UniDBGrid(05) 目录1]DataSource设置2]显示MEMO类型里的文字3]显示悬浮提示4]显示当前记录及总记录数5]读取所有记录,及分页6]在前面加上序号列7]不显示 ...
- css之元素浮动
什么时候用浮动——块级元素一行显示就使用浮动 浮动的特点——让元素脱标不占位置 什么时候清除浮动——父元素没有设置高度:父元素中所有的子元素都设置浮动 清除浮动的方法(掌握): 1.额外标签清除浮动 ...
- nrm 源管理器
什么是nrm nrm 是一个 npm 源管理器,允许你快速地在 npm 源间切换. 安装nrm 在命令行执行命令,npm install -g nrm,全局安装nrm. 使用 执行命令nrm ls查看 ...
- 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中
1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...
- C#用SQLDMO操作数据库----转载
C#用SQLDMO操作数据库 sqldmo.dll是随sql server2000一起发布的.sqldmo.dll自身是一个com对象 sqldmo(sql distributed managemen ...
- Django的urls(路由)
目录 Django的urls(路由) 正则表达式详解 路由匹配(分组匹配) 无名分组 有名分组 反向解析 无名分组反向解析 有名分组反向解析 路由分发 名称空间 虚拟环境 伪静态 Django的url ...
- 第1节 kafka消息队列:3、4、kafka的安装以及命令行的管理使用
6.kafka的安装 5.1三台机器安装zookeeper 注意:安装zookeeper之前一定要确保三台机器时钟同步 */1 * * * * /usr/sbin/ntpdate us.pool.nt ...
- tomcat web服务的搭建
在安装tomcat之前必须安装jdk 安装配置jdk 1.查看虚拟机中是否已安装java包 # rpm -qa | grep java 如果查找已安装java包,先卸载全部的openjdk #rpm ...
- gerrit关闭管理员权限后解决办法
问题描述:gerrit以管理员的身份登录后,create new list和 create new group不显示,导致无法创建新的项目和权限组 出现问题:gerrit可视化页面误删all_proj ...
- RabbitMq学习笔记——概念
1.RabbitMQ简介 MQ全称为Message Queue(消息队列),是一种“应用程序”<—>“应用程序”的通信方法.MQ是一个典型的“消费”<—>“生产者”模型的代表, ...