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 相关文章推荐
pyenv命令管理多个Python版本
Mar 26 Python
matplotlib作图添加表格实例代码
Jan 23 Python
在python 中实现运行多条shell命令
Jan 07 Python
Django组件cookie与session的具体使用
Jun 05 Python
简单了解python的break、continue、pass
Jul 08 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
python返回数组的索引实例
Nov 28 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python 解决pycharm运行py文件只有unittest选项的问题
Sep 01 Python
Python自动创建Excel并获取内容
Sep 16 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
DSP接收机前端设想
2021/03/02 无线电
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
js 单引号 传递方法
2009/06/22 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
Python实现的Kmeans++算法实例
2014/04/26 Python
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
python调用其他文件函数或类的示例
2019/07/16 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
java字符串格式化输出实例讲解
2021/01/06 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
小学美术教学反思
2014/02/01 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
环境建设实施方案
2014/03/14 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
超市主管竞聘书
2015/09/15 职场文书
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技