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的chardet库获得文件编码并修改编码
Jan 22 Python
python使用post提交数据到远程url的方法
Apr 29 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
python pygame入门教程
Jun 01 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读取RSS feed的代码
2008/08/01 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
部署Python的框架下的web app的详细教程
2015/04/30 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python 实现登录网页的操作方法
2018/05/11 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
python如何构建mock接口服务
2021/01/28 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
优秀技术工人先进材料
2014/02/17 职场文书
学校消防演习方案
2014/02/19 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
学习nginx基础知识
2021/09/04 Servers