我正在尝试使用QML(更具体地说是ApplicationWindow)运行一个简单的Qt应用程序。
我的Python代码是一个简单的QML调用程序:
import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtQuick import QQuickView
from PySide2.QtCore import QUrl
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QQuickView()
url = QUrl('view.qml')
view.setSource(url)
view.show()
sys.exit(app.exec_())
我的QML文件是一个简单的ApplicationWindow,具有标题,宽度和高度:
import QtQuick 2.0
ApplicationWindow {
title: "Qt Quick Controls Gallery"
width: 640
height: 480
}
运行代码将导致黑屏,其默认标题(“ gui.py”,而不是QML上给出的标题)以及默认的宽度和高度(在QML文件上未指定):
我可以运行其他组件,例如矩形,按钮和画布,而不会出现问题。我的问题特别是与ApplicationWindow组件有关,我想使用它,因为它是QML应用程序的标准。
随着PySide2成为Python Qt的支持,我一直在努力坚持,但是我当然也接受PyQt解决方案。
答案 0 :(得分:2)
如果您阅读docs:
QQuickView
类提供了一个用于显示Qt Quick用户界面的窗口。
也就是说,QQuickView
提供了一个显示项目的窗口,但是ApplicationWindow
已经是一个窗口,因此在{{的情况下,您不再需要也不应该使用QQuickView
1}},您必须使用ApplicationWindow
:
main.py
QQmlApplicationEngine
view.qml
import sys
from PySide2 import QtCore, QtGui, QtQml
if __name__ == '__main__':
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
app = QtGui.QGuiApplication(sys.argv)
engine = QtQml.QQmlApplicationEngine()
url = QtCore.QUrl.fromLocalFile('view.qml')
engine.load(url)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
答案 1 :(得分:2)
首先,当pyside返回时:
QQuickView不支持将Windows用作根项目。如果你希望 要从QML创建根窗口,请考虑使用 代替QQmlApplicationEngine。
这是一个有效的示例:
main.py
import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import Qt, QCoreApplication
from PySide2.QtQml import QQmlApplicationEngine
if __name__ == '__main__':
app = QApplication(sys.argv)
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
engine = QQmlApplicationEngine('view.qml')
sys.exit(app.exec_())
view.qml
import QtQuick.Controls 2.4
import QtQuick 2.0
ApplicationWindow {
title: "Qt Quick Controls Gallery"
visible: true
width: 640
height: 480
Rectangle {
width: 30
height: 30
color: "blue"
}
}