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 相关文章推荐
Python3如何解决字符编码问题详解
Apr 23 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
python简单商城购物车实例代码
Mar 15 Python
python微信公众号之关键词自动回复
Jun 15 Python
python主线程捕获子线程的方法
Jun 17 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
python的sys.path模块路径添加方式
Mar 09 Python
Python Django搭建网站流程图解
Jun 13 Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 Python
教你使用pyinstaller打包Python教程
May 27 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
substr()函数中文版
2006/10/09 PHP
获得Google PR值的PHP代码
2007/01/28 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
33种Javascript 表格排序控件收集
2009/12/03 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
css3 transform属性详解
2014/09/30 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
大学生创业感言
2014/01/25 职场文书
建筑工地大门标语
2014/06/18 职场文书
学生偷窃检讨书
2014/09/25 职场文书
法院授权委托书格式
2014/09/28 职场文书
收银员岗位职责范本
2015/04/07 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
什么是css原子化,有什么用?
2022/04/24 HTML / CSS