PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

Python57

了解之前先来查看一下已经做好的桌面应用的效果,功能实则比较简单,就是通过 pyqt5 做一个桌面应用通过 requests 网路请求关联到开源的天气查询 Api,从而完成整个应用。下面通过录制的简单视频了解一下吧!

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

全文阅读

写一个函数 init_ui() 用来对应用的 UI 界面进行布局:

'''UI界面处理函数'''
    def init_ui(self):
        self.setWindowTitle('城市天气查询系统')

        grid = QGridLayout()  # 初始化栅格布局

        self.solr_line_text = QLineEdit()  # 初始化搜索内容输入框
        self.solr_line_text.setPlaceholderText('输入城市名称')  # 设置默认内容
        self.solr_line_text.setFocus()  # 鼠标焦点

        self.query_button = QPushButton('查询')  # 初始化查询按钮
        self.query_button.clicked.connect(lambda: self.query_button_click(self.solr_line_text))

        self.res_text = QTextEdit()  # 初始化文本输入框
        self.res_text.setPlaceholderText('查询结果展示区域...')  # 初始化提示内容
        self.res_text.setReadOnly(True)  # 设置只读模式

        '''将内容加入布局'''
        grid.addWidget(self.solr_line_text, 0, 0)
        grid.addWidget(self.query_button, 0, 1)
        grid.addWidget(self.res_text, 1, 0, 1, 2)

        self.setLayout(grid)

写一个槽函数,将查询的按钮信号发送到这个槽函数上就可以按钮与函数的绑定功能。

    def query_button_click(self,solr_line_text):
        '''
        天气查询按钮绑定函数(槽函数)
        :param solr_line_text:
        :return:
        '''
        if solr_line_text.text():
            text = solr_line_text.text()
            self.request_init(text)

        else:
            warn_dialog = QDialog()
            warn_dialog.setWindowTitle('警告')
            warn_dialog.resize(80,40)

            warn_label_text = QLabel(warn_dialog)
            warn_label_text.setText('请输入城市名称!')
            warn_label_text.move(7,15)

            warn_dialog.setWindowModality(Qt.ApplicationModal)
            warn_dialog.exec()

接下来,通过 requests 模块发送网络请求。

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

隐藏福利:公众号内回复"天气查询系统"获取完整代码。

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

一款优美的windows cmd命令行工具cmder

如何进行excel数据分析之后的可视化数据写入保存!

excel数据处理二:快速完成openpyxl数据的新增、修改!

excel数据处理一:巧妙使用openpyxl提取、筛选数据

比Selenium更方便的自动化测试工具Helium!

Original: https://www.cnblogs.com/lwsbc/p/15685441.html
Author: Python集中营
Title: PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)



相关阅读1

Title: 排序算法python版(5)-归并排序算法

推荐文章

2023年,摸鱼计划系列活动又跟大家见面了,我们活动规则不变,福利升级! 新的一年,继续把工作学习中的bug处理、碎片知识,统统记录到博客里。留下自己在技术之路的成长足迹。
推荐原创51CTO博客13天前10000+阅读11点赞732评论1收藏

在51CTO博客成功发布第一篇博文,可领取新人福利,奖品三选一。来分享属于自己的技术踩坑经验吧!
推荐原创51CTO博客95天前10000+阅读16点赞11评论5收藏

;
原创Marydon1小时前131阅读点赞评论收藏

出现网关不亮灯的原因就是配置问题,仔细检查网关和微端程序的IP地址有没有填错,如有填错更改过来即可。​微端无连接不更新的问题解决方法​1、端口不对​微端没有更新,玩家进入游戏是地图跟装备都看不见,是漆黑的,微端显示连接失败,好吧,那么从头开始检查,检查什么地方呢,第一检查微端网关程序,看看上面是否全部显示连接成功了,如果是成功的,那么看一下列表里面的端口对不对的上​服务器IP都是连接成功的,没有连
原创会开服的小杰1小时前143阅读1点赞评论收藏

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师 然冬基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(253 -1) 到 253 -1)。——MDN在 JavaScript 只有浮点数(可以理解成带有小数点的数)。数字就是我们日常使用的数字,在 JavaScript 中默认是十进制的。10;-1;1.1;10.0;+0;-0;99999
原创imooc慕课君2小时前154阅读点赞评论收藏

本篇介绍下flea-jersey模块的文件下载功能
原创Huazie2小时前143阅读点赞评论收藏

_app.js只加入一个 ThemeProvide 具体在 ThemeProvide 中import type { AppProps } from "next/app
原创JediHongbin2小时前143阅读点赞评论收藏

概念数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。好处1.节约资源2.用户访问高效实现标准接口:DataSource javax.sql包下的方法:获取连接:getConnection()归还连接:Connection.close()。如果连接对
原创共饮一杯无2小时前137阅读1点赞评论1收藏

项目中需要自定义icon,在项目中通用html使用css样式.icon-save { /使用自己的图片来替换/ background: url('图片地址') center no-repeat; background-size: contain;}.icon-save::before { /*before
原创不叫猫先生2小时前138阅读点赞评论收藏

二叉树的锯齿形层序遍历(树、广度优先搜索)给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树3,9,20,null,null,15,7,3/\920/\157返回锯齿形层序遍历如下:3,20,9,15,7解答:javapublicclassTreeNode{intval;TreeNodeleft;TreeNode
原创共饮一杯无2小时前138阅读1点赞评论1收藏

1.情景展示 where限制条件后面如果想要加select语句的话,如何实现? 2.原因分析 通常情况下,where后面跟的是:clo
原创Marydon2小时前149阅读点赞评论收藏

编码进化回忆上次内容上次 研究了 视频终端的 演化 从VT05 到 VT100从 黑底绿字 到 RGB 24位真彩色形成了 VT100选项从而 将颜色 ​​数字化​​ 了生活中我们更常用 10个数字 但是 计算机中 用二进制日常计数的十进制数 是如何存储进计算机的呢??从10进制到2进制日常生活中 为什么用10进制? 是因为 人的生理结构计算机中 使用2进制 是因为 计算机的生理结构 电灯、开关
原创overmind19802小时前133阅读点赞评论收藏

程序员的日历,真的不用上网查,直接一条命令就可以默认显示本月的日历(20230214)bashcal二月2023日一二三四五六12345678910111213141516171819202122232425262728显示指定年份的日历bashcaly20232023一月二月三月日一二三四五六日一二三四五六日一二三四五六12345671234123489101112131456789101156
原创彭世瑜2小时前139阅读点赞评论收藏

效果如下图所示:我们实际上使用了2D来模拟3D效果。!(https://s2.51cto.com/images/blog/202302/14095121_63eae919a42774018.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20
原创JerryWang汪子熙2小时前146阅读点赞评论收藏

写在前面+K9s是一个基于终端UI的K8S管理工具+博文内容为k9s在windows、Linux以及docker安装Demo+简单的热键使用。+理解不足小伙伴帮忙指正
原创山河已无恙3小时前129阅读点赞评论收藏

写在前面+kubebox是一个轻量的k8s管理工具,可以基于命令行终端或Web端+博文内容涉及:kubebox不同方式的安装下载,简单使用。+如果希望轻量一点,个人很推荐这个工具,轻量,而且使用简单。+理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢赫尔曼·黑塞《德米安》简单介绍Kubebox是一个类似k9s的基于命令行终端的k8s管理工具,可以直接下载可执行
原创山河已无恙3小时前143阅读点赞评论收藏

本文将给大家分享Java并发编程相关的知识点,具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果。
原创京东云开发者3小时前145阅读点赞评论收藏

软件开发入门教程网Bootstrap4 面包屑导航(Breadcrumb)面包屑导航是一种基于网站层次信息的显示方式。以博客为例,面包屑导航可以显示发布日期、类别或标签。它们表示当前页面在导航层次结构内的位置,是在用户界面中的一种导航辅助。Bootstrap 中的面包屑导航是一个简单的带有 .breadcrumb class 的无序列表。分隔符会通过 CSS(bootstrap
原创雪奈椰子3小时前134阅读点赞评论收藏

一、前言 - webpack热更新​​Hot Module Replacement​​,简称​​HMR​​,无需完全刷新整个页面的同时,更新模块。​​HMR​​的好处,在日常开发工作中体会颇深:节省宝贵的开发时间、提升开发体验。刷新我们一般分为两种:一种是页面刷新,不保留页面状态,就是简单粗暴,直接​​window.location.reload()​​。另一种是基于​​WDS (Webpack-
原创Seattle小小瓜3小时前135阅读点赞评论收藏

1.背景Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入。想要把自动装
原创Seattle小小瓜3小时前135阅读点赞评论收藏

一. pyinstaller和Nuitka使用感受1.1 使用需求这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。这2个工具同时都能满足项目的需要:隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的;而nuitka则是将python源码转成C++(这里得到的是二进制的
原创LinkSLA3小时前146阅读点赞评论收藏

本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。
原创vivo互联网3小时前135阅读点赞评论收藏

Original: https://blog.51cto.com/u_11160105/5515108
Author: redrose2100
Title: 排序算法python版(5)-归并排序算法

相关阅读2

Title: 字的研究(2)fontTools-字体文件的解析

前言

本文主要介绍如果使用Python第三方库fontTools对OpenType字体文件(包括TrueType轮廓和Postscript轮廓)的解析操作。

fontTools简介

fontTools是由一组操作字体的库和组件组成的Python第三方库,要求 Python3.6以及更高的版本。其中包括merge(字体合并)、subset(取字体子集)以及ttx(将OpenType转化为XML)等。

安装

pip install fontTools

本文中使用的版本为4.28.5

字体文件的解析

读取

如前文所述,OpenType字体文件标准是有sfnt结构封装的,基于sfnt的表结构,OpenType格式的字体文件可以分为多个表结构。

创建TTFont实例,通过keys()可以查看字体文件的所有表名:

from fontTools.ttLib.ttFont import TTFont
font = TTFont("Resources/simsun.ttf")
print(font.keys())

运行结果如下:

['GlyphOrder', 'head', 'hhea', 'maxp', 'OS/2', 'hmtx', 'cmap', 'fpgm', 'prep', 'cvt ', 'loca', 'glyf', 'name', 'post', 'gasp', 'EBDT', 'EBLC', 'GDEF', 'GPOS', 'GSUB', 'MERG', 'meta', 'vhea', 'vmtx']

表名中包含'glyf',所以simsun.ttf是一个使用TrueType轮廓的字体文件。

换成使用Postscript轮廓的字体文件:

font = TTFont("Resources/AdobeSongStd-Light.otf")
print(font.keys())

运行结果如下:

['GlyphOrder', 'head', 'hhea', 'maxp', 'OS/2', 'name', 'cmap', 'post', 'CFF ', 'BASE', 'GPOS', 'GSUB', 'VORG', 'hmtx', 'vhea', 'vmtx', 'DSIG']

表名中没有'glyf'而存在'CFF ',后者是存储Postscript信息的表格。

对于TrueType Collection文件则可以使用如下方法读取,返回一个TTFont实例的列表

from fontTools.ttLib.ttCollection import TTCollection
collection = TTCollection("Resources/simsun.ttc")
print(list(collection))

运行结果如下:

[, ]

直接从这些表格提取到具体信息是复杂的,但TTFont提供了一些方法以方便地获取信息:

font.getGlyphOrder() # 返回一个字形名称列表,以其在文件中的顺序排序
font.getGlyphNames() # 返回一个字形名称列表,以字母顺序排序
font.getBestCmap() # 返回一个字形ID为键、字形名称为值的字典
font.getReverseGlyphMap() # 返回一个字形名称为键、字形ID为值的字典
font.getGlyphName(10000) # 输入字形ID返回字形名称
font.getGlyphID("uni70E0") # 输入字形名称返回字形ID
font.getGlyphSet() # 返回一个_TTGlyphSet对象,包含字形轮廓数据

上述方法中,最后一项与轮廓数据有关的方法是最重要的。可惜的是,官方文档似乎并没有对这个对象做进一步解释,故下文是我读源码及其中注释后的分析,如有错漏,敬请指教。

Pen与_TTGlyphset

我认为,作者设计这一部分时的难点在于OpenType字体文件标准存在两种不同轮廓描述方式。Pen和_TTGlyphset的存在使得两种不同的轮廓描述方式可以用同一套方法解析和显示。

The Pen Protocol

基于TrueType轮廓的字体文件和基于Postscript轮廓是两种截然不同的数据格式。Pen是一个用于标准化的"画"出轮廓的对象,或者是数据和实际轮廓间的媒介。

具体来说,Pen对象的子类包含将上述两种轮廓数据转化为画线、移动等模拟实际轮廓的方法。在fontTools的pen库中包含将轮廓数据转化为qt、reportLab等第三方库中实例的Pen子类。

_TTGlpyhset

_TTGlyphset是一个类似字典的,以字形名称为键、_TTGlyph为值的对象。_TTGlyph中包含字形数据轮廓数据并可以通过draw方法"画"出。_TTGlyph的两个子类_TTGlyphGlyf和_TTGlyphCFF分别对应TrueType轮廓和Postscript轮廓。具体使用方法如下:

font = TTFont("Resources/simsun.ttf")
glyph = font.getGlyphSet()["uni70E0"]
glyph.draw(pen) # pen为实例化后的Pen子类

freetypePen

以freetype-py库为例,使用freetypePen首先需要安装freetype-py:

pip install freetype-py

以下代码修改自自fontTools的官方文档提供的范例程序:

from fontTools.ttLib import TTFont
from fontTools.pens.freetypePen import FreeTypePen
from fontTools.misc.transform import Offset

pen = FreeTypePen(None) # 实例化Pen子类
font = TTFont("Resources/simsun.ttf") # 实例化TTFont
glyph = font.getGlyphSet()["uni70E0"] # 通过字形名称选择某一字形对象
glyph.draw(pen) # "画"出字形轮廓
width, ascender, descender = glyph.width, font['OS/2'].usWinAscent, -font['OS/2'].usWinDescent # 获取字形的宽度和上沿以及下沿
height = ascender - descender # 利用上沿和下沿计算字形高度
pen.show(width=width, height=height, transform=Offset(0, -descender)) # 显示以及矫正

运行结果如下:

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

注意,可能由于fontTools==4.28.5版本问题,通过pip安装后freetypePen.py并没有包含在pens文件夹下,需要使用的可以从fontTools的GitHub仓库中下载,放到site-packages\fontTools\pens文件夹下,下载路径为https://github.com/fonttools/fonttools/blob/main/Lib/fontTools/pens/freetypePen.py。该问题可能在后续版本中修复。

ttx

最后是我个人认为fontTools中最为实用的一个组件ttx,其功能为将TTFont实例转化为XML格式以及将XML文件转化为TTFont。基于这一组件,我们可以较为方便的实现对字体文件内容的修改。

from fontTools.ttLib import TTFont

font = TTFont("Resources/simsun.ttf") # 实例化TTFont
font.saveXML("simsun.xml") # TTFont实例转化为XML文件,参数为XML文件路径
font.importXML("simsun1.xml") # XML文件转化为TTFont实例,参数为XML文件路径

除了将整个字体文件转化为XML文件,ttx还可以将文件中的单个表转化为XML文件,避免多余的存储和时间消耗:

from fontTools.ttLib.ttFont import TTFont

font = TTFont("Resources/simsun.ttf")
font.saveXML("temp2.xml",tables=["glyf"]) # tables为需要转化的表名组成列表

单个表的XML文件直接导入TTFont时,只会影响XML文件存在的表,而其他表不变:

font.importXML("temp2.xml")

参考

https://fonttools.readthedocs.io/en/latest/index.html

https://github.com/fonttools/fonttools

Original: https://www.cnblogs.com/yc0806/p/15842529.html
Author: 多事鬼间人
Title: 字的研究(2)fontTools-字体文件的解析

相关阅读3

Title: Python 将列表数据生成折线图(Pandas使用)

前言

本文提供python将列表数据画图的样例代码。主要是给自己的记录,顺便分享一下。主要使用到的库是:pandas、matplotlib。

代码

下面直接发一下样例代码。

#!/user/bin/env python
# coding=utf-8
"""
@project : csdn
@author  : 剑客阿良_ALiang
@file   : draw_pic.py
@ide    : PyCharm
@time   : 2022-03-23 09:38:28
"""
import pandas as pd
from matplotlib import pyplot as plt

_dates = ['2022-03-22 16:45:08', '2022-03-22 16:46:08', '2022-03-22 16:47:08', '2022-03-22 16:48:08',
          '2022-03-22 16:49:08', '2022-03-22 16:50:08', '2022-03-22 16:51:08', '2022-03-22 16:52:08',
          '2022-03-22 16:53:08', '2022-03-22 16:54:08']
_data1 = [1, 2, 4, 6, 3, 2, 5, 7, 8, 0]
_data2 = [0, 9, 8, 2, 1, 0, 6, 5, 2, 1]

di = pd.DatetimeIndex(_dates,
                      dtype='datetime64[ns]', freq=None)

pd.DataFrame({'data1': _data1},
             index=di).plot.line()  # 图形横坐标默认为数据索引index。
#
plt.savefig(r'data/p1.png', dpi=200)
plt.show()  # 显示当前正在编译的图像

pd.DataFrame({'data1': _data1, 'data2': _data2},
             index=di).plot.line()  # 图形横坐标默认为数据索引index。
#
plt.savefig(r'data/p2.png', dpi=200)
plt.show()  # 显示当前正在编译的图像

代码说明:

1、x轴的时间列表:_dates,准备了两组列表数据,需要和日期列表数量对应。

2、制作了两幅图,第二幅图主要是两条线生成在一张图上。

验证效果

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)
PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

总结

主要做个记录。

最近听到一句话:人工智能存在的价值是服务于人,而不是超越人、替代人。

我思考了一段时间,也和朋友讨论过多次,我仍然无法认同这个观点。

如果本文对你有帮助,点个赞吧,谢谢!

PyQt5 GUI && Requests Api 做一个天气查询系统(文末领取完整代码)

本人CSDN主页地址:剑客阿良_ALiang的主页

一起学习,一起进步。

Original: https://www.cnblogs.com/jk-aliang/p/16043386.html
Author: 剑客·阿良
Title: Python 将列表数据生成折线图(Pandas使用)