Я рекомендую, чтобы при возникновении проблем запустить код из консоли / CMD, например, при первом выполнении кода, я получил следующее сообщение:
file:///xxx/main.qml:16:15: Expected token `:'
и ошибка ясна , вы должны использовать :
вместо =
при установке значения свойства.
Если оно запустится снова, вы получите следующее сообщение об ошибке:
file:///xxx/main.qml:14:13: IDs cannot start with an uppercase letter
И сообщение очень четкое: «Страница» не может быть именем идентификатора, поскольку она начинается с заглавной буквы, поэтому решение состоит в том, чтобы использовать «страницу».
При повторном запуске вы получите следующее сообщение об ошибке :
file:///xxx/main.qml:11: ReferenceError: MyWindow is not defined
Очевидно, что эта переменная не определяется тем, что вы должны использовать строку или удалить это назначение.
Еще одно усовершенствование вашего кода - создание абсолютного маршрута с использованием информации о местоположении .py.
Учитывая вышеизложенное, решение выглядит следующим образом:
main.py
import os
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), "main.qml")
engine.load(QUrl.fromLocalFile(filename))
sys.exit(app.exec_())
main.qml
import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
ApplicationWindow {
id: mainWindow
height: 160
width: 300
visible: true
title: "MyWindow"
Item {
id: page
visible: true
width: parent.width
Rectangle {
height: {
console.log("I am a comment")
return 160
}
color: "#ff0000"
Text{
id: mainText
text: "I am some regular text"
height: 50
width: parent.width
font.pixelSize: 12
}
Button{
id: mainButton
text: "Push Me"
anchors.top: mainText.bottom
}
}
}
}