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装饰器验证配置文件示例
Feb 24 Python
python静态方法实例
Jan 14 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Tesserocr库的正确安装方式
Oct 19 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
python tkinter实现屏保程序
Jul 30 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
Python中三维坐标空间绘制的实现
Sep 22 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中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
javascript动态加载二
2012/08/22 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
python cookielib 登录人人网的实现代码
2012/12/19 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
初二学习计划书范文
2014/04/27 职场文书
企业文化口号
2014/06/12 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
保送生自荐信
2015/03/06 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
React实现动效弹窗组件
2021/06/21 Javascript