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基础之输入和输出实例分析
Aug 18 Python
Python计算回文数的方法
Mar 11 Python
python验证码识别实例代码
Feb 03 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
python用插值法绘制平滑曲线
Feb 19 Python
python实现各种插值法(数值分析)
Jul 30 Python
python批量解压zip文件的方法
Aug 20 Python
python获取array中指定元素的示例
Nov 26 Python
Python 字典中的所有方法及用法
Jun 10 Python
Python如何把不同类型数据的json序列化
Apr 30 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
MySQL数据源表结构图示
2008/06/05 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
深入理解javascript原型链和继承
2014/09/23 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python绘制多个子图的实例
2019/07/07 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
介绍一下Java的事务处理
2012/12/07 面试题
Hibernate持久层技术
2013/12/16 面试题
电大会计学自我鉴定
2014/02/06 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
投标授权委托书范文
2014/08/02 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
亮剑精神观后感
2015/06/05 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL