首页 > 解决方案 > 我的 QWebEngineView 类没有显示在我的 Windows 中

问题描述

我想在我创建的两个框中插入我的“WebPage”类的两个实例“box_url”和“box_info”,这个问题我已经尝试了几次但我看不到它们,而不使用“QGridLayout”,因为使用它我认为可行,我想了解如何做谢谢,这是代码,`

from PyQt5 import QtCore, QtWidgets
import sys
from PyQt5.QtWidgets import QDialog,QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEngineView
from PyQt5.QtCore import QUrl

class WebPage(QWebEngineView):

    def load(self, url):
        self.setUrl(QUrl(url))

    def adjustTitle(self):
        self.setWindowTitle(self.title())

    def disableJS(self):
        settings = QWebEngineSettings.globalSettings()
        settings.setAttribute(QWebEngineSettings.JavascriptEnabled, False)

class Page(QDialog):
    def __init__(self):
        super(Page, self).__init__()
        self.setObjectName("self")
        self.resize(582, 437)
        self.label_info = QtWidgets.QLabel(self)
        self.label_info.setGeometry(QtCore.QRect(40, 20, 47, 13))
        self.label_info.setObjectName("label_info")

        self.box_info = QtWidgets.QTextBrowser(self)
        self.box_info.setGeometry(QtCore.QRect(40, 50, 231, 161))
        self.box_info.setObjectName("box_info")

        self.web = WebPage()
        self.web.load("https://i.picsum.photos/id/0/200/300.jpg?hmac=0pq7Zy79Vy4K-8w1qAMo1ppYmPvl-7lvwSx-LyZ7vNY")
        self.web.setGeometry(QtCore.QRect(40, 50, 231, 161))
        self.web.setObjectName("url1")

     
        self.box_url = QtWidgets.QTextBrowser(self)
        self.box_url.setGeometry(QtCore.QRect(40, 230, 491, 151))
        self.box_url.setObjectName("box_url")

        self.web1 = WebPage()
        self.web1.load("https://i.picsum.photos/id/0/200/300.jpg?hmac=0pq7Zy79Vy4K-8w1qAMo1ppYmPvl-7lvwSx-LyZ7vNY")
        self.web1.setGeometry(QtCore.QRect(40, 50, 231, 161))
        self.web1.setObjectName("url2")


     
        self.button_close = QtWidgets.QPushButton(self)
        self.button_close.setGeometry(QtCore.QRect(250, 400, 75, 23))
        self.button_close.setObjectName("button_close")


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

    def retranslateUi(self, Page):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Page", "Form"))
        self.label_info.setText(_translate("Page", "<html><head/><body><p><span style=\" font-size:10pt; font-weight:600;\">Info:</span></p></body></html>"))
        self.button_close.setText(_translate("Page", "Close"))
if __name__ == '__main__':
    app = QApplication(sys.argv)
    page = Page()
    page.show()
    app.exec_()

` 我想要这张图片:
图片

标签: pythonpyqt5

解决方案


对于要作为另一个小部件的一部分显示的小部件,它必须是该小部件或某个子部件的子部件。此外,如果将布局设置为小部件,则添加到布局的所有小部件都将是初始小部件的子级。因此,您的代码适用于后者的 QGridLayout。因此,如果您不想使用布局,请将其作为父级传递给窗口:

self.web = WebPage(self)
# ...
self.web1 = WebPage(self)
# ...

尽管在这种情况下,最好使用您在框中建立的布局并将页面添加为子项:

self.web = WebPage()
self.web.load(
    "https://i.picsum.photos/id/0/200/300.jpg?hmac=0pq7Zy79Vy4K-8w1qAMo1ppYmPvl-7lvwSx-LyZ7vNY"
)
lay = QtWidgets.QVBoxLayout(self.box_info)
lay.addWidget(self.web)
self.web.setObjectName("url1")

self.box_url = QtWidgets.QTextBrowser(self)
self.box_url.setGeometry(QtCore.QRect(40, 230, 491, 151))
self.box_url.setObjectName("box_url")

self.web1 = WebPage()
self.web1.load(
    "https://i.picsum.photos/id/0/200/300.jpg?hmac=0pq7Zy79Vy4K-8w1qAMo1ppYmPvl-7lvwSx-LyZ7vNY"
)
lay = QtWidgets.QVBoxLayout(self.box_url)
lay.addWidget(self.web1)
self.web1.setObjectName("url2")

推荐阅读