关于pyqt5中的WebEngineView点击链接打开新页面问题

您所在的位置:网站首页 js点击打开新页面没反应怎么回事 关于pyqt5中的WebEngineView点击链接打开新页面问题

关于pyqt5中的WebEngineView点击链接打开新页面问题

2024-07-17 19:07| 来源: 网络整理| 查看: 265

最近使用pyqt5制作了一个浏览器抓取截图的小工具,很感兴趣就拿来研究了以下,遇到一些坑记录以下:

代码在最后

1、首先是python的pip可执行文件在python的安装目录的Scripts这个子目录里面,使用的话只能是在CMD当中使用。在python中执行就会提示找不到,在PyDev console也是这样。

        如果CMD中提示不是内部或外部命令... 就需要配置环境变量到电脑中,就是在path中添加一条指向Python\Python38\Scripts的变量,之后重启CMD就可以了。

2、python版本问题,搜罗了好久

Note that for v5.11 and later the 32-bit Windows wheels do not contain the WebEngine modules.

翻译:请注意,对于v5.11及更高版本,32位Windows轮盘不包含WebEngine模块。

解决: 【方法一】 指定安装5.10.1版本的pyqt5

pip install pyqt5==5.10.1

【方法二】 单独安装WebEngine,安装命令为:

pip install PyQtWebEngine

解决 No module named 'PyQt5.QtWebEngineWidgets'

 我使用的版本是,可以作为参考

 3、然后出现有的链接可以点进去,有的点击完没反应

原因:这是因为网页中部分链接是在新标签页中打开的,而这中js请求在QtWebEngineView中会调用creatwiondow这个方法

 只要重写这个方法,实现自己的逻辑就可以了,我看到了常见做法是添加tab页面,还有一种是直接在本窗口新建tab,代码如下:

# -*- coding: utf-8 -*- # @Author: liyl # @Date : 2020/08/01 import sys from PyQt5 import QtCore from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWebEngineWidgets import QWebEngineView # 创建主窗口 from main import WebEngineView class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 设置窗口标题 self.setWindowTitle('浏览器') # 设置窗口大小900*600 self.resize(1300, 700) self.show() # 当前view加载地址 self.webview = WebEngineView(self) self.webview.setUrl(QUrl("http://www.baidu.com")) self.setCentralWidget(self.webview) # 使用QToolBar创建导航栏,并使用QAction创建按钮 # 添加导航栏 navigation_bar = QToolBar('Navigation') # 设定图标的大小 navigation_bar.setIconSize(QSize(16, 16)) # 添加导航栏到窗口中 self.addToolBar(navigation_bar) # 添加URL地址栏 self.urlbar = QLineEdit() # 让地址栏能响应回车按键信号 self.urlbar.returnPressed.connect(self.navigate_to_url) navigation_bar.addSeparator() navigation_bar.addWidget(self.urlbar) # 让浏览器相应url地址的变化 self.webview.urlChanged.connect(self.renew_urlbar) # 显示地址 def navigate_to_url(self): q = QUrl(self.urlbar.text()) if q.scheme() == '': q.setScheme('http') self.webview.setUrl(q) # 响应输入的地址 def renew_urlbar(self, q): # 将当前网页的链接更新到地址栏 self.urlbar.setText(q.toString()) self.urlbar.setCursorPosition(0) # 第一种,是直接在本窗口新建tab的方式。 (不推荐使用这种方式) # 注:这种方式有个问题,因为新建的tab覆盖了原来的tab,所以,原来tab的所有信息都找不到了,如浏览,账号,密码等。 class WebEngineView(QWebEngineView): # 重写createwindow() def createWindow(self, QWebEnginePage_WebWindowType): return self # 第二种,就是新建窗口 # class WebEngineView(QWebEngineView): # windowList = [] # # # 重写createwindow() # def createWindow(self, QWebEnginePage_WebWindowType): # new_webview = WebEngineView() # new_window = MainWindow() # new_window.setCentralWidget(new_webview) # # new_window.show() # self.windowList.append(new_window) # 注:没有这句会崩溃!!! # return new_webview # 程序入口 if __name__ == "__main__": app = QApplication(sys.argv) # 创建主窗口 browser = MainWindow() browser.show() # 运行应用,并监听事件 sys.exit(app.exec_())

参考原文链接:

QT:QWebEngineView里面的页面链接点击无反应的解决方法

QWebEngineView点击链接不起作用

利用Python和PyQt5实现简易浏览器



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3