有人可以告诉我如何调整此QWebEnginePage的大小。当我运行此文件时,它会打开一个具有完整浏览器的窗口,就像打开了网站一样,但是我想调整它的大小以在窗口中添加按钮和其他元素。
这是我的代码:
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, QtWebChannel, QtGui
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSizeGrip, QGridLayout
from jinja2 import Template
#import D_scraper
class Element(QtCore.QObject):
def __init__(self, name, parent=None):
super(Element, self).__init__(parent)
self._name = name
@property
def name(self):
return self._name
def script(self):
return ""
class WebEnginePage(QtWebEngineWidgets.QWebEnginePage):
def __init__(self, parent=None):
super(WebEnginePage, self).__init__(parent)
self.loadFinished.connect(self.onLoadFinished)
self._objects = []
self._scripts = []
def add_object(self, obj):
self._objects.append(obj)
@QtCore.pyqtSlot(bool)
def onLoadFinished(self, ok):
print("Finished loading: ", ok)
if ok:
self.load_qwebchannel()
self.add_objects()
def load_qwebchannel(self):
file = QtCore.QFile(":/qtwebchannel/qwebchannel.js")
if file.open(QtCore.QIODevice.ReadOnly):
content = file.readAll()
file.close()
self.runJavaScript(content.data().decode())
if self.webChannel() is None:
channel = QtWebChannel.QWebChannel(self)
self.setWebChannel(channel)
def add_objects(self):
if self.webChannel() is not None:
objects = {obj.name: obj for obj in self._objects}
self.webChannel().registerObjects(objects)
_script = """
{% for obj in objects %}
var {{obj}};
{% endfor %}
new QWebChannel(qt.webChannelTransport, function (channel) {
{% for obj in objects %}
{{obj}} = channel.objects.{{obj}};
{% endfor %}
});
"""
self.runJavaScript(Template(_script).render(objects=objects.keys()))
for obj in self._objects:
if isinstance(obj, Element):
self.runJavaScript(obj.script())
class Helper(Element):
classClicked = QtCore.pyqtSignal(str)
def script(self):
js = """
document.addEventListener('click', function(e) {
e = e || window.event;
var target = e.target || e.srcElement;
e.preventDefault()
{{name}}.objectClicked(target.className);
}, false);"""
return Template(js).render(name=self.name)
@QtCore.pyqtSlot(str)
def objectClicked(self, className):
if className:
self.classClicked.emit(className)
def on_clicked(name):
on_clicked.xcv = name
print(on_clicked.xcv)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = Form()
classname_helper = Helper("classname_helper")
classname_helper.classClicked.connect(on_clicked)
view = QtWebEngineWidgets.QWebEngineView()
page = WebEnginePage()
page.add_object(classname_helper)
view.setPage(page)
view.load(QtCore.QUrl("https://www.flipkart.com/search?q=mobiles&as=on&as-show=on&otracker=AS_Query_TrendingAutoSuggest_1_0_na_na_na&otracker1=AS_Query_TrendingAutoSuggest_1_0_na_na_na&as-pos=1&as-type=TRENDING&suggestionId=mobiles&requestId=4720716a-cf2f-4822-9036-c66b9542d2d6"))
view.show()
sys.exit(app.exec_())
我是QT Framework的新手,所以遇到了这个问题。您可以在窗口内添加一个按钮以及调整大小的浏览器作为示例,以便我理解。