利用Python制作一个看段子的软件

基本环境配置

版本:Python3

系统:Windows

相关模块:PyQt5

实现效果图

完整代码


执行以上代码,可以看到我们的段子软件的功能已经完成。这个程序涉及到了不少新的知识点,我大概解释一下:

QApplication.setStyleSheet可以设置应用的全局样式表

QLabel.setWordWrap可以启用或禁用自动换行(默认关闭状态)

for x in y这种语法是用来遍历容器类型数据(比如列表)的。y是容器,x是元素,在每次迭代中会更新。

range(a, b)函数可以用来生成整数范围[a, b-1]。范围不是列表,不存储元素,只是描述了元素的生成规则。

for也可以用来遍历迭代器。range函数返回的范围属于Python中的迭代器。

在函数中定义的变量是局部变量,出了函数就访问不到了。要在函数体中定义或访问全局变量,得用global关键字

点击不同的段子标题,要下载不同的段子。所以,我们需要在槽函数里获知被点击的段子。我们考虑将段子的网址保存到按钮中,在槽函数中只要考虑如何获取哪个按钮被点击就行了。Qt不会将点击事件的信号源(按钮对象)传递给槽函数,但是,Qt提供了QObject.sender()实例方法来获取最新的信号源。

这个QObject.sender()是个实例方法,意思是这个方法只能在QObject类的实例对象上调用。

QObject是Qt系统中所有类型的根类。Qt中的所有类都继承自QObject。所以,每个Qt中的对象都是QObject类的对象

QObject.sender()方法可以在任意Qt对象上调用。我们可以直接用app.sender()来获得最新的信号源,即用户最新点击的按钮。

QObject.setProperty可以在Qt对象上保存数据。比如,我们可以将段子的地址保存在关联的按钮中。

textwrap.fill方法可以以指定的段长切割字符串,每个切点放一个换行符

常见的网页是一种HTML文档,是一种基于标签的树形结构,格式类似于<html><head></head><body><a href="www.github.io">CLICK</a></body></html>。手动解析这种文档,一般要用到正则表达式,非常麻烦。所以,我们一般用现成的解析器来解析HTML文档。在这里,我们使用parsel(pip install parsel)这个模块来解析HTML。

Selector(HTML代码)构造函数用来生成HTML解析器,Selector.xpath()方法用指定的路径(XPath)来解析HTML,返回的对象还是Selector。Selector.get方法获取匹配到的第一个元素,Selector.getall方法获取匹配到的全部元素。//div/li/a表示HTML文档中任意位置的div标签下的直接子li标签下的直接子a标签。在我们下载的网页中,这个XPath语句正好匹配到我们需要的5个段子的超链接。要获取标签的文本,需要使用text()。

[function(x) for x in y]这种语法叫生成器,可以用来将一个列表中的元素经过处理一一映射到另一个列表。我们也可以利用这种语法,将需要写两行的for x in y: function(x)语法压缩到一行。

"\n".join(字符串列表)这种语法可以用特定的字符连接多个字符串。

猜你喜欢

转载自blog.csdn.net/qq_40925239/article/details/88819782