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图片转换二进制存入mysql
Dec 06 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
Python 修改列表中的元素方法
Jun 26 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
Python 实现RSA加解密文本文件
Dec 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
php无限遍历目录示例
2014/02/21 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
React styled-components设置组件属性的方法
2018/08/07 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python3.5 创建文件的简单实例
2018/04/26 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
django admin 添加自定义链接方式
2020/03/11 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
助理政工师申报材料
2014/06/03 职场文书
商务代表岗位职责
2015/02/15 职场文书