python - 我的 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_()
解决方案
对于要作为另一个小部件的一部分显示的小部件,它必须是该小部件或某个子部件的子部件。此外,如果将布局设置为小部件,则添加到布局的所有小部件都将是初始小部件的子级。因此,您的代码适用于后者的 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")