def widgetForQMLUsingQQuickWidget(self, qmlFilename, parentWindow): widget = QQuickWidget() qurl = resourceMgr.urlToQMLResource(resourceSubpath=qmlFilename) widget.setSource(qurl) widget.show() " Return widget both as widget and quickThing having rootObject() " return widget, widget
import sys from PyQt5.QtCore import QUrl, QMetaObject, Q_ARG, QVariant, QTimer, \ QDate from PyQt5.QtQuickWidgets import QQuickWidget from PyQt5.QtWidgets import QApplication counter = 0 def onTimeout(obj): global counter value = { "lesson": str(counter), "subject": "PE", "day": QDate.longDayName(1 + counter % 7) } QMetaObject.invokeMethod(obj, "append", Q_ARG(QVariant, value)) counter += 1 if __name__ == '__main__': app = QApplication(sys.argv) w = QQuickWidget() w.setSource(QUrl('main.qml')) timer = QTimer() timer.timeout.connect(lambda: onTimeout(w.rootObject())) timer.start(1000) w.show() sys.exit(app.exec_())
class PageThumbnailer(QObject): def __init__(self, parent=None): super().__init__(parent) self._view = QQuickWidget() # QQuickWidget self._size = QSize(450, 253) * gVar.app.devicePixelRatio() self._url = QUrl() self._title = '' self._loadTitle = False self._view.setAttribute(Qt.WA_DontShowOnScreen) self._view.setSource(QUrl('qrc:data/thumbnailer.qml')) self._view.rootContext().setContextProperty('thumbnailer', self) self._view.show() def setSize(self, size): if size.isValid(): self._size = size def setUrl(self, url): if url.isValid(): self._url = url def url(self): return self._url def loadTitle(self): ''' @return: bool ''' return self._loadTitle def setLoadTitle(self, load): ''' @param: load bool ''' self._loadTitle = load def title(self): title = self._title if not title: title = self._url.host() if not title: title = self._url.toString() return title def start(self): if self._view.rootObject() and WebView.isUrlValid(self._url): self._view.rootObject().setProperty('url', self._url) else: def func(): self.thumbnailCreated.emit(QPixmap()) QTimer.singleShot(500, func) # Q_SIGNALS: thumbnailCreated = pyqtSignal(QPixmap) # public Q_SLOTS: @pyqtSlot(result=str) def afterLoadScript(self): ''' @return: QString ''' return Scripts.setCss('::~webkit-scrollbar{display:none;}') @pyqtSlot(bool) def createThumbnail(self, status): ''' @param: status bool ''' if not status: self.thumbnailCreated.emit(QPixmap()) return def func(): self._title = self._view.rootObject().property('title').strip() img = self._view.grabFramebuffer().scaled(self._size, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) pixmap = QPixmap.fromImage(img) self.thumbnailCreated.emit(pixmap) QTimer.singleShot(1000, func)
from PyQt5.QtCore import QStandardPaths, QDir, QUrl from PyQt5.QtNetwork import QNetworkDiskCache, QNetworkAccessManager from PyQt5.QtQml import QQmlNetworkAccessManagerFactory class NetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory): def __init__(self): QQmlNetworkAccessManagerFactory.__init__(self) def create(self, parent): nam = QNetworkAccessManager(parent) diskCache = QNetworkDiskCache(nam) cachePath = QStandardPaths.displayName(QStandardPaths.CacheLocation) print "cache path:", cachePath diskCache.setCacheDirectory(cachePath) diskCache.setMaximumCacheSize(100 * 1024 * 1024) # 设置100M缓存 nam.setCache(diskCache) return nam if __name__ == "__main__": import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtQuickWidgets import QQuickWidget app = QApplication(sys.argv) widget = QQuickWidget() factory = NetworkAccessManagerFactory() widget.engine().setNetworkAccessManagerFactory(factory) widget.setSource(QUrl("test.qml")) widget.show() sys.exit(app.exec_())
elif qtMsgType == QtCore.QtCriticalMsg: logging.critical(msg) elif qtMsgType == QtCore.QtFatalMsg: logging.error(msg) logging.exception(msg) else: logging.error(msg) class HelloWorld(QtWidgets.QWidget): def __init__(self, parent=None): super(HelloWorld, self).__init__() #使用super()方法继承父类 self.resize(250, 150) #改变窗口部件的大小 self.setWindowTitle('Hello Word!') #设置窗口部件标题 class QmlWidget(QQuickWidget): def __init__(self): self.setSource(QUrl("test.qml")) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) # qInstallMessageHandler(handler) # helloworld = HelloWorld() # helloworld.show() logger.init() view = QQuickWidget() view.setSource(QUrl.fromLocalFile("temp/test.qml")) view.show() sys.exit(app.exec_())
def quickWidgetFromFile(fp: str, parent=None): qWidget = QQuickWidget(parent) qWidget.setSource(QUrl.fromLocalFile(fp)) qWidget.show() return qWidget