我正在尝试使用
PyQt5.uic.loadUi
加载一个 UI 文件,其中有 QWebEngineView
,但我的代码当前加载一个空白的 QT 表单。
它之前一直有效,直到我改变了类相互引用的方式。我是班级工作新手,无法理解 self 和 Parent 的正确用法。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
html = """
<!DOCTYPE html><html><head></head><body>
<div id="output">Test page</div>
</body></html>
"""
text1 = 'demo text'
class Ui(QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('demoweb.ui', self)
ctr = self.findChild(QWidget,"webViewContainer")
self.browser = ctr.findChild(QWebEngineView,"webEngineView")
self.edit = self.findChild(QLineEdit,"lineEdit")
class Window(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
ui = Ui()
self._ui = ui
ui.browser.setHtml(html)
page = ui.browser.page()
page.loadFinished.connect(self.onLoadFinished)
ui.edit.setText(text1)
self._ready = False
def onLoadFinished(self):
#code to be added
return
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec()
demoweb.ui 文件:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect><x>0</x><y>0</y><width>746</width><height>462</height></rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLineEdit" name="lineEdit">
<property name="geometry">
<rect><x>21</x><y>361</y><width>691</width><height>22</height></rect>
</property>
</widget>
<widget class="QWidget" name="webViewContainer" native="true">
<property name="geometry">
<rect><x>10</x><y>10</y><width>711</width><height>331</height></rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWebEngineView" name="webEngineView">
<property name="url">
<url>
<string>about:blank</string>
</url>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
<customwidgets>
<customwidget>
<class>QWebEngineView</class>
<extends>QWidget</extends>
<header location="global">QtWebEngineWidgets/QWebEngineView</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
在遵循musicamante
的建议后,此问题已得到解决谢谢eyllanesc,您的建议也解决了问题,但在简化的代码中不再需要。
下面的工作代码
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
html = """
<!DOCTYPE html><html><head></head><body>
<div id="output">Test page</div>
</body></html>
"""
text1 = 'demo text'
class Ui(QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('demoweb.ui', self)
ctr = self.findChild(QWidget,"webViewContainer")
self.browser = ctr.findChild(QWebEngineView,"webEngineView")
self.edit = self.findChild(QLineEdit,"lineEdit")
class Window(QtWidgets.QMainWindow):
def __init__(self, parent = None):
super().__init__(parent)
uic.loadUi('demoweb.ui', self)
self.webEngineView.setHtml(html)
page = self.webEngineView.page()
page.loadFinished.connect(self.onLoadFinished)
self.lineEdit.setText(text1)
self._ready = False
def onLoadFinished(self):
#code to be added
return
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = Window()
window.show()
app.exec()