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多线程、异步+多进程爬虫实现代码
Feb 17 Python
Python函数式编程
Jul 20 Python
Python日期时间Time模块实例详解
Apr 15 Python
tornado+celery的简单使用详解
Dec 21 Python
python利用opencv实现SIFT特征提取与匹配
Mar 05 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
Python用户自定义异常的实现
Dec 25 Python
python Timer 类使用介绍
Dec 28 Python
python某漫画app逆向
Mar 31 Python
Python使用Kubernetes API访问集群
May 30 Python
详解PyTorch模型保存与加载
Apr 28 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
php 8小时时间差的解决方法小结
2009/12/22 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
Python图算法实例分析
2016/08/13 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
python如何查看系统网络流量的信息
2016/09/12 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
致跳远运动员加油稿
2014/02/11 职场文书
主办会计岗位职责
2014/03/13 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年纪委工作总结
2015/05/13 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
员工安全责任协议书
2016/03/22 职场文书