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中str is not callable问题详解及解决办法
Feb 10 Python
对Python中的@classmethod用法详解
Apr 21 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
Python最小二乘法矩阵
Jan 02 Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 Python
python 消除 futureWarning问题的解决
Dec 25 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
Python实现七个基本算法的实例代码
Oct 08 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
基于python制作简易版学生信息管理系统
Apr 20 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
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php判断当前操作系统类型
2015/10/28 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
js中for in的用法示例解析
2013/12/25 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python复制文件操作实例详解
2015/11/10 Python
Python查询IP地址归属完整代码
2017/06/21 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
Python封装原理与实现方法详解
2018/08/28 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Python原始套接字编程实例解析
2020/01/29 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
路政管理毕业自荐书范文
2014/02/10 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
学校安全生产承诺书
2014/05/23 职场文书
社区志愿者培训方案
2014/06/10 职场文书
宣传活动总结范文
2014/07/01 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
工作年限证明模板
2015/06/15 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python