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脚本实现下载合并SAE日志
Feb 10 Python
Python中下划线的使用方法
Mar 27 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python实现针对中文排序的方法
May 09 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
Python Django 前后端分离 API的方法
Aug 28 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
python某漫画app逆向
Mar 31 Python
python3 字符串str和bytes相互转换
Mar 23 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中实现进程间通讯
2006/10/09 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
js实现五星评价功能
2017/03/08 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
详解Python可视化神器Yellowbrick使用
2019/11/11 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
什么是python的自省
2020/06/21 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Python之字典添加元素的几种方法
2020/09/30 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
优秀求职信范文分享
2013/12/19 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
优秀员工演讲稿
2014/05/19 职场文书
理发店策划方案
2014/06/05 职场文书
全运会口号
2014/06/20 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python