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 获取 Linux 系统信息的代码
Jul 13 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
深入理解Python3 内置函数大全
Nov 23 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
python tkinter实现屏保程序
Jul 30 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Python os库常用操作代码汇总
Nov 03 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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 cookie 登录验证示例代码
2009/03/16 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
基于递归实现的php树形菜单代码
2014/11/19 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
Vue实现购物车功能
2017/04/27 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
wxPython中文教程入门实例
2014/06/09 Python
详解Python编程中包的概念与管理
2015/10/16 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
python使用Geany编辑器配置方法
2020/02/21 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
四风对照检查材料范文
2014/09/27 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
合作合同协议书范本
2015/01/27 职场文书
颐和园导游词
2015/01/30 职场文书
春节随笔
2015/08/15 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书