使用 PyQt 通过类使用 QWebengine 加载 UI 文件

问题描述 投票:0回答:1

我正在尝试使用

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>
python class pyqt qtwidgets qwebengineview
1个回答
0
投票

在遵循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()
© www.soinside.com 2019 - 2024. All rights reserved.