得到根對象我試圖顯示使用的PyQt和QML動態對象,但我得到這個錯誤:PyQt的:如何從QQmlApplicationEngine
win = engine.rootObjects()[0]
IndexError: list index out of range
這裏是我的代碼的PyQt:
import sys
import os
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine,QQmlEngine, QQmlComponent
from PyQt5.QtCore import QObject, pyqtSlot, QVariant,QUrl
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('main.qml')
win = QObject()
win = engine.rootObjects()[0]
win.show()
sys.exit(app.exec_())
(PS:與非動態對象,我的代碼運行沒關係)
這是我的main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
ApplicationWindow {
id : root
visible: true
width: 1000
height: 800
title: qsTr("ACTEMIUM")
SwipeView {
id: swipeView
anchors.fill: parent
currentIndex: tabBar.currentIndex
Page1 {
Label {
text: qsTr("Page1")
anchors.centerIn: parent
}
}
Page2 {
Label {
text: qsTr("Second page")
anchors.centerIn: parent
}
}
Page3 {
Label {
text: qsTr("Troisieme page")
anchors.centerIn: parent
}
}
}
footer: TabBar {
id: tabBar
currentIndex: swipeView.currentIndex
TabButton {
text: qsTr("First")
}
TabButton {
text: qsTr("Second")
}
TabButton {
text: qsTr("Trois")
}
}
}
和我Page1.qml 進口QtQuick 2.7
Page1Form {
id: root
button.onClicked: {
console.log("OK. Entered text: " + textField.text);
var component = Qt.createComponent("main2.qml")
if(component.status != Component.Ready)
{
if(component.status == Component.Error)
console.debug("Error:"+ component.errorString());
return; // or maybe throw
}
var window = component.createObject(root)
window.show()
}
}
Page1Form.ui.qml:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
Item {
property alias textField: textField
property alias button: button
Rectangle {
id: rectangle
x: 0
y: 0
width: 1000
height: 800
gradient: Gradient {
GradientStop {
position: 0.031
color: "#ffffff"
}
GradientStop {
position: 0.901
color: "#000000"
}
}
RowLayout {
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
anchors.top: parent.top
TextField {
id: textField
placeholderText: qsTr("ENTRER TEXTE")
}
Button {
id: button
text: qsTr("OK")
}
}
}
}
請提供QML代碼 – folibis
這是我的主要qml – karahman
爲什麼你需要那個? 「根對象」(ApplicationWindow)已經將它的'visible'屬性設置爲'true'。在大多數情況下,到達QML引擎並取出對象引用 –