PyQt5 QWebEngine页面返回后进程残留问题求助
解决PyQt5中Web页面返回后进程残留的问题
问题原因
你当前的代码存在两个导致进程残留的问题:
- 点击返回按钮时,只是新建一个搜索界面并加到StackedWidget,原来的Google(或其他网页)界面还留在StackedWidget的列表中,没有被彻底销毁。QtWebEngine(加载网页的组件)会单独启动进程,只要界面没被销毁,这个进程就会一直运行。
- 代码里的
qApp.disconnect()是错误操作,它会断开整个程序的所有信号连接,导致其他按钮失效,完全没必要加这行。
修复步骤(通俗易懂版)
我们需要修改每个网页界面的返回方法,让它回到上一个已有的界面,并且彻底销毁当前的网页界面,这样WebEngine进程就会自动关闭。
1. 修改Google界面的返回方法
找到google类的bck方法,替换成下面的代码:
def bck(self): # 获取当前界面在StackedWidget中的位置 current_idx = widget.currentIndex() # 切换回上一个界面(也就是搜索界面) widget.setCurrentIndex(current_idx - 1) # 把当前的Google界面从StackedWidget中移除 widget.removeWidget(self) # 彻底销毁这个界面,触发WebEngine进程关闭 self.deleteLater()
2. 批量修改其他网页界面的返回方法
所有类似facebook、ytb、twitter等类的bck方法,都要改成和上面一样的代码,比如facebook类的bck方法:
def bck(self): current_idx = widget.currentIndex() widget.setCurrentIndex(current_idx - 1) widget.removeWidget(self) self.deleteLater()
3. 删掉错误的qApp.disconnect()
把google类里原来的qApp.disconnect()彻底删掉,这行代码会破坏整个程序的功能。
额外优化建议(可选)
你现在每次切换界面(比如登录后到搜索、注册返回登录)都在新建界面,会导致StackedWidget里堆积大量重复的界面,浪费内存。可以改成:
- 切换时回到已存在的界面,而不是新建
- 或者在切换时删除旧的界面(类似上面的方法)
比如登录成功后,不需要新建searchengine,可以检查StackedWidget里是否已经有搜索界面,直接切换过去;如果没有再新建。不过这个是进阶优化,先解决进程问题再说。
内容的提问来源于stack exchange,提问作者boran aktaş
相关产品推荐
相关产品推荐

