IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> PyQT6的从零开始(三):在pyqt桌面程序简单内置网页浏览器 -> 正文阅读

[移动开发]PyQT6的从零开始(三):在pyqt桌面程序简单内置网页浏览器


说明

结合自己的毕设需求,要在基于pyqt的桌面程序中内置一个web浏览器,特此记录。
前排提示:本文使用的方法组件是QtWebEngineWidgets,但pyqt6中不带有QtWebEngineWidgets,而且大概5.10及以上版本的pyqt5也将QtWebEngineWidgets移除了,需要自己安装,并且安装后是在pyqt5的目录中
因此要使用web界面的话,最好全部使用pyqt5进行开发,不然模块混合使用pyqt6,pyqt5会出现错误
(我这里只是一个独立界面,就只是这块用了pyqt5)。

一、安装PyQtWebEngine

首先在anaconda的虚拟环境中安装QtWebEngineWidgets,使用pip安装即可
安装命令为:
pip install PyQtWebEngine
安装完后这个模块才会出现在PyQt5的目录里, 导入方法为 :

from PyQt5 import QtWebEngineWidgets

二、设计方法

1.QtDesinger设计界面

在这里插入图片描述
我这界面是这样设计的,大致思想跟Android的设计似的,分为上下两个horizonlayout,再分别往里面放自己要的组件,然后下面这个webview一般在QTdesigner中是找不到的,可以先把外层的弄好,在代码里填充这块的生成代码
ui转化的py代码中:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 781, 31))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.url_box = QtWidgets.QTextEdit(self.horizontalLayoutWidget)
        self.url_box.setObjectName("url_box")
        self.horizontalLayout.addWidget(self.url_box)
        self.go_Button = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.go_Button.setObjectName("go_Button")
        self.horizontalLayout.addWidget(self.go_Button)
        self.horizontalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(10, 50, 781, 501))
        self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        
        # 此处添加
        self.webview = QtWebEngineWidgets.QWebEngineView(self.horizontalLayoutWidget_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(8)
        sizePolicy.setHeightForWidth(self.webview.sizePolicy().hasHeightForWidth())
        self.webview.setSizePolicy(sizePolicy)
        self.webview.setObjectName("webview")
        self.horizontalLayout_2.addWidget(self.webview)
        # 此处结束
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "输入网址:"))
        self.go_Button.setText(_translate("MainWindow", "→"))
from PyQt5 import QtWebEngineWidgets

在其中添加注释标注的部分,便可以创建webview填充整个horizonlayout2

2.主程序调用

import sys

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from webtest import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('加载外部网页的例子')
        self.__ui = Ui_MainWindow()
        self.__ui.setupUi(self)
        self.__ui.go_Button.clicked.connect(self.geturl)
        #回车键绑定按钮,但只能在文本框外进行
        # self.__ui.go_Button.setShortcut(Qt.Key_Return)

    def geturl(self):
        url = self.__ui.url_box.toPlainText()
        # 网页加载方法        
        self.__ui.webview.load(QUrl(url))

if __name__ == '__main__':
    app=QApplication(sys.argv)
    win=MainWindow()
    win.show()
    app.exit(app.exec())

3.实现效果

在这里插入图片描述

这次主要完成的便是pyqt的网页浏览功能,当然也可以通过pyqt设计一个标准的浏览器,实现多标签页面等功能,如果有需要可以参考这个项目:

https://blog.csdn.net/hxxjxw/article/details/105897678

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:51:12  更:2022-04-07 22:51:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:33:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码