I’m trying to load a UI file using PyQt5.uic.loadUi
which has QWebEngineView
, but my code currently loads a blank QT form.
It was working before until I changed the way classes were referencing each other. I’m new to working with classes and cannot understand the correct use of self and parent.
JavaScript
x
41
41
1
import sys
2
from PyQt5 import QtCore, QtGui, QtWidgets, uic
3
from PyQt5.QtWidgets import *
4
from PyQt5.QtWebEngineWidgets import QWebEngineView
5
6
html = """
7
<!DOCTYPE html><html><head></head><body>
8
<div id="output">Test page</div>
9
</body></html>
10
"""
11
text1 = 'demo text'
12
13
class Ui(QMainWindow):
14
def __init__(self):
15
super(Ui, self).__init__()
16
uic.loadUi('demoweb.ui', self)
17
ctr = self.findChild(QWidget,"webViewContainer")
18
self.browser = ctr.findChild(QWebEngineView,"webEngineView")
19
self.edit = self.findChild(QLineEdit,"lineEdit")
20
21
class Window(QtWidgets.QWidget):
22
def __init__(self, parent = None):
23
super().__init__(parent)
24
ui = Ui()
25
self._ui = ui
26
ui.browser.setHtml(html)
27
page = ui.browser.page()
28
page.loadFinished.connect(self.onLoadFinished)
29
ui.edit.setText(text1)
30
self._ready = False
31
32
def onLoadFinished(self):
33
#code to be added
34
return
35
36
if __name__ == "__main__":
37
app = QtWidgets.QApplication([])
38
window = Window()
39
window.show()
40
app.exec()
41
demoweb.ui file:
JavaScript
1
45
45
1
<?xml version="1.0" encoding="UTF-8"?>
2
<ui version="4.0">
3
<class>MainWindow</class>
4
<widget class="QMainWindow" name="MainWindow">
5
<property name="geometry">
6
<rect><x>0</x><y>0</y><width>746</width><height>462</height></rect>
7
</property>
8
<property name="windowTitle">
9
<string>MainWindow</string>
10
</property>
11
<widget class="QWidget" name="centralwidget">
12
<widget class="QLineEdit" name="lineEdit">
13
<property name="geometry">
14
<rect><x>21</x><y>361</y><width>691</width><height>22</height></rect>
15
</property>
16
</widget>
17
<widget class="QWidget" name="webViewContainer" native="true">
18
<property name="geometry">
19
<rect><x>10</x><y>10</y><width>711</width><height>331</height></rect>
20
</property>
21
<layout class="QVBoxLayout" name="verticalLayout">
22
<item>
23
<widget class="QWebEngineView" name="webEngineView">
24
<property name="url">
25
<url>
26
<string>about:blank</string>
27
</url>
28
</property>
29
</widget>
30
</item>
31
</layout>
32
</widget>
33
</widget>
34
</widget>
35
<customwidgets>
36
<customwidget>
37
<class>QWebEngineView</class>
38
<extends>QWidget</extends>
39
<header location="global">QtWebEngineWidgets/QWebEngineView</header>
40
</customwidget>
41
</customwidgets>
42
<resources/>
43
<connections/>
44
</ui>
45
Advertisement
Answer
This has been resolved after following suggestions from musicmante
Thanks eyllanesc, your suggestion also resolved the problem but was no longer required in the simplified code.
Working code below
JavaScript
1
40
40
1
import sys
2
from PyQt5 import QtCore, QtGui, QtWidgets, uic
3
from PyQt5.QtWidgets import *
4
from PyQt5.QtWebEngineWidgets import QWebEngineView
5
6
html = """
7
<!DOCTYPE html><html><head></head><body>
8
<div id="output">Test page</div>
9
</body></html>
10
"""
11
text1 = 'demo text'
12
13
class Ui(QMainWindow):
14
def __init__(self):
15
super(Ui, self).__init__()
16
uic.loadUi('demoweb.ui', self)
17
ctr = self.findChild(QWidget,"webViewContainer")
18
self.browser = ctr.findChild(QWebEngineView,"webEngineView")
19
self.edit = self.findChild(QLineEdit,"lineEdit")
20
21
class Window(QtWidgets.QMainWindow):
22
def __init__(self, parent = None):
23
super().__init__(parent)
24
uic.loadUi('demoweb.ui', self)
25
self.webEngineView.setHtml(html)
26
page = self.webEngineView.page()
27
page.loadFinished.connect(self.onLoadFinished)
28
self.lineEdit.setText(text1)
29
self._ready = False
30
31
def onLoadFinished(self):
32
#code to be added
33
return
34
35
if __name__ == "__main__":
36
app = QtWidgets.QApplication([])
37
window = Window()
38
window.show()
39
app.exec()
40