Python实战之制作天气查询软件


Posted in Python onMay 14, 2019

前言

本文主要给大家介绍的是关于Python制作天气查询软件,下面话不多说了,来一起看看详细的介绍吧

效果图

Python实战之制作天气查询软件

以前,给大家分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件。

源代码和 exe 文件:

github 地址:https://github.com/xflywind/Python-Application

本地下载:http://xiazai.3water.com/201905/yuanma/weather-python(3water.com).rar

开发环境

  • Python3
  • PyQt5
  • requests

准备工作

首先要获取不同城市对应的天气代码,可以从https://www.heweather.com/documents/city.html 网站下载 csv 文件(文末获取 csv 文件),拿到 csv 文件,我们首先要进行数据预处理工作。

import pandas as pd
# 将下载好的文件命名为 'city_code.csv',并删除 header
file = pd.read_csv('city_code.csv')
# 选取需要的两列信息
file = file.loc[:,['City_ID', 'City_CN']]
# 读取前五行信息
file.head()

Python实战之制作天气查询软件

# 匹配 City_ID 中的数字
def convert(x):
 pat = re.compile('(\d+)')
 return pat.search(x).group()

file['City_ID_map'] = file['City_ID'].map(convert)

# 建立城市与代码之间的映射关系
def city2id(file):
 code_dict = {}
 key = 'City_CN'
 value = 'City_ID_map'
 for k, v in zip(file[key], file[value]):
 code_dict[k] = v
 return code_dict
code_dict = city2id(file)

# 将所得的字典数据存储为 txt 文件
import json
filename = 'city_code.txt'
with open(filename, 'w') as f:
 json.dump(code_dict, f)

将字典存储为 txt 文件后,以后我们只需读取文件,再获取字典:

with open(filename, 'r') as f:
 text = json.load(f)

如果不想费工夫处理这些数据,可以直接使用文末提供的 city_code.txt 文件。

Ui 设计

使用 Qt Designer,我们不难设计出以下界面:

Python实战之制作天气查询软件

如果不想设计这些界面,可以直接导入我提供的 Ui_weather.py 文件。

主体逻辑:

我们这次使用的 api 接口为:'http://wthrcdn.etouch.cn/weather_mini?citykey=[code]',code 就是之前处理过的城市代码,比如常州的城市代码为:101191101。替换掉变量 code ,网站返回给我们一段 json 格式的文件:

Python实战之制作天气查询软件

根据这段 json 语句,我们很容易提取需要的信息:

# 天气情况
data = info_json['data']
city = f"城市:{data['city']}\n"
today = data['forecast'][0]
date = f"日期:{today['date']}\n"
now = f"实时温度:{data['wendu']}度\n"
temperature = f"温度:{today['high']} {today['low']}\n"
fengxiang = f"风向:{today['fengxiang']}\n"
type = f"天气:{today['type']}\n"
tips = f"贴士:{data['ganmao']}\n"

当然,我们首先要使用 requests,get 方法,来获取这段 json 代码。

def query_weather(code):
 # 模板网页
 html = f'http://wthrcdn.etouch.cn/weather_mini?citykey=[code]'
 
 # 向网页发起请求
 try:
 info = requests.get(html)
 info.encoding = 'utf-8'
 # 捕获 ConnectinError 异常
 except requests.ConnectionError:
 raise 
 
 
 
 # 将获取的数据转换为 json 格式
 try:
 info_json = info.json()
 # 转换失败提示无法查询
 except JSONDecodeError:
 return '无法查询'

下面我们介绍下本文用到的控件方法:

# 将 textEdit 设置为只读模式
self.textEdit.setReadOnly(True)
# 将鼠标焦点放在 lineEdit 编辑栏里
self.lineEdit.setFocus()
# 获取 lineEdit 中的文本
city = self.lineEdit.text()
# 设置文本
self.textEdit.setText(info)
# 清空文本
self.lineEdit.clear()

为查询按钮设置快捷键:

def keyPressEvent(self, e):
# 设置快捷键
 if e.key() == Qt.Key_Return:
 self.queryWeather()

最后,我们可以使用 Pyinstaller -w weather.py 打包应用程序,但是要记得打包完,将 city_code.txt 复制到 dist/weather 文件夹下,否则程序无法运行。

以上便是本文的全部内容了,更详细的内容请见源代码。

源代码和 exe 文件:

github 地址:https://github.com/xflywind/Python-Application

本地下载:http://xiazai.3water.com/201905/yuanma/weather-python(3water.com).rar

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python迭代器和生成器介绍
Mar 06 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python3如何解决字符编码问题详解
Apr 23 Python
Python3 socket同步通信简单示例
Jun 07 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
python斐波那契数列的计算方法
Sep 27 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
利用Django模版生成树状结构实例代码
May 19 Python
python自动保存百度盘资源到百度盘中的实例代码
Aug 26 Python
使用python 的matplotlib 画轨道实例
Jan 19 Python
Python实现上下文管理器的方法
Aug 07 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 Python
python中时间模块的基本使用教程
May 14 #Python
使用Python正则表达式操作文本数据的方法
May 14 #Python
Django如何防止定时任务并发浅析
May 14 #Python
python3 pygame实现接小球游戏
May 14 #Python
Django 多环境配置详解
May 14 #Python
python仿evething的文件搜索器实例代码
May 13 #Python
python爬虫租房信息在地图上显示的方法
May 13 #Python
You might like
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
万能的php分页类
2017/07/06 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
vue计算属性computed的使用方法示例
2019/03/13 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python实现画圆功能
2018/01/25 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
机电一体化求职信
2014/03/10 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Python sklearn分类决策树方法详解
2022/09/23 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技