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 变量类型及命名规则介绍
Jun 08 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python中的choice()方法使用详解
May 15 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
Python日志处理模块logging用法解析
May 19 Python
Python Process创建进程的2种方法详解
Jan 25 Python
python munch库的使用解析
May 25 Python
python基于机器学习预测股票交易信号
May 25 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php抽象类用法实例分析
2015/07/07 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
jquery实用代码片段集合
2010/08/12 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
js获取当前页的URL与window.location.href简单方法
2017/02/13 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python创建xml文件示例
2017/03/22 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
python 根据字典的键值进行排序的方法
2019/07/24 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python编写打字训练小程序
2019/09/26 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
团代会宣传工作方案
2014/05/08 职场文书
食品工程专业求职信
2014/06/15 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
2019年最新借条范本!
2019/07/08 职场文书
索尼ICF-36收音机评测
2022/04/30 无线电
Go语言编译原理之变量捕获
2022/08/05 Golang