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 Queue模块详解
Nov 30 Python
Python实现的批量下载RFC文档
Mar 10 Python
Pythont特殊语法filter,map,reduce,apply使用方法
Feb 27 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
python利用matplotlib库绘制饼图的方法示例
Dec 18 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
每天迁移MySQL历史数据到历史库Python脚本
Apr 13 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
Nov 06 Python
Python列表操作方法详解
Feb 09 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
python3代码输出嵌套式对象实例详解
Dec 03 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/11/23 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
php之XML转数组函数的详解
2013/06/07 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
jquery动态加载图片数据练习代码
2011/08/04 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
解决python 输出是省略号的问题
2018/04/19 Python
python梯度下降法的简单示例
2018/08/31 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
CSMA/CD介质访问控制协议
2015/11/17 面试题
学校安全防火方案
2014/06/07 职场文书
环境日宣传活动总结
2014/07/09 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers