有GUI的爬虫plus

代码比较多,优化空间也很大,就不放上来了。

聊聊写的时候碰到的问题和解决。

QT使用的基本思路

首先实例化组件:

1
2
3
4
self.label_name = QLabel('name')
self.edit_name = QComboBox()
self.label_num = QLabel('page num')
self.edit_page_num = QComboBox()

层:
1
self.lay_h1=QHBoxLayout()

向层中添加组件:
1
2
3
4
5
6
7
8
9
10
self.lay_h1.addWidget(self.label_name)
self.lay_h1.addWidget(self.label_num)
self.lay_h1.addWidget(self.label_url)
self.lay_h2.addWidget(self.edit_name)
self.lay_h2.addWidget(self.edit_page_num)
self.lay_h2.addWidget(self.edit_url)
self.lay_h3.addWidget(self.btn_crawl)
self.lay_h3.addWidget(self.btn_update)
self.lay_h3.addWidget(self.btn_exit)


向窗口添加层:
1
2
3
4
self.lay_v1=QVBoxLayout()
self.lay_v1.addLayout(self.lay_h1)
self.lay_v1.addLayout(self.lay_h2)
self.lay_v1.addLayout(self.lay_h3)

定义按钮行为:
1
2
3
4
self.btn_crawl.clicked.connect(self.crawl)
# self.btn_exit.clicked.connect(main.show)
self.btn_update.clicked.connect(self.update)
self.btn_exit.clicked.connect(self.close)

设置下拉框等等:
1
2
3
# 下拉框
self.edit_name.addItems(list(url_dict.keys())) # 认列表,不认字典
self.edit_page_num.addItems(str(i) for i in range(1,11)) # 好事情

最后完成窗口设置:
1
self.setLayout(self.lay_v1)

如何多py文件开发?

我也不清楚这个应该怎么称呼,总之就是多个源文件,但源文件之间可以使用其他文件的代码。要称呼的话应该是“工程”。

如果需要使用其他文件里的代码,在文件开头import文件名即可,就当作库来使用。

主函数

也就是if __name__ == '__main__':这句话,__name__是自带变量,获取文件名。

使用pyqt窗口

需要实例化,即

1
2
3
4
5
6
app = QApplication(sys.argv)
addurl_test=addurl()
crawl_test=crawler()
main = mainpage(addurl_test,crawl_test)
main.show()
sys.exit(app.exec_())

实例化了几个窗口,在实例化时,会调用__init__方法,但是没有调用show方法,所以并不会显示。

关于窗口切换

一开始是试着通过调用closeshow实现窗口切换,但是发现类的方法之间并不能使用主函数中实例化的窗口,需要传送参数,但是connect方法传参会出现TypeError: argument 1 has unexpected type 'NoneType'的问题,于是不了了之。

后面参考其他同学的代码,发现他们是通过在分页面的类内插入形如

1
2
switch_window1=QtCore.pyqtSignal()
self.switch_window1.emit()

的语段来实现。

在主界面似乎并没有这种语段。

需要更改父类的方法

直接写就是覆盖,如果需要在父类方法中插入语句,可以

1
2
3
def show(self):
super().show()
print(self.__class__.__name__)

使用super()

QT自带计时器

1
2
3
timer=QTimer(self)
timer.start(5000)
timer.stop()

计时器也是一个对象(毕竟面向对象),是需要实例化的。

“抓取成功”提示


有GUI的爬虫plus
http://petertan303.github.io/2023/05/22/有GUI的爬虫plus/
作者
peter?
发布于
2023年5月22日
许可协议