Python 运行PyQt代码不会打开窗口

Python 运行PyQt代码不会打开窗口,python,pyqt,qml,pyqt5,Python,Pyqt,Qml,Pyqt5,我目前正在做一个python在线课程,这个练习的重点是PyQt。我正在使用Python 3.7和Qt5 讲师代码与我的代码完全相同,但我的代码无法打开窗口 main.py看起来像这样 import os, sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtQuick import * from PyQt5.Qt import * if __name__ == "__main__": app = Q

我目前正在做一个python在线课程,这个练习的重点是PyQt。我正在使用Python 3.7和Qt5

讲师代码与我的代码完全相同,但我的代码无法打开窗口

main.py看起来像这样

import os, sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtQuick import *
from PyQt5.Qt import *

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)

    engine = QQmlApplicationEngine()
    engine.load(QUrl.fromLocalFile("main.qml"))

    sys.exit(app.exec_())
我的main.qml是

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtGraphicalEffects 1.0

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
            }
        }
    }
}

我建议在出现问题时,从控制台/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
信息非常清楚:“页面”不能是id的名称,因为它以大写字母开头,所以解决方案是使用“页面”

如果再次运行,则会收到以下错误消息:

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

导入操作系统
导入系统
从PyQt5.QtCore导入QUrl
从PyQt5.QtGui导入qgui应用程序
从PyQt5.QtQml导入QQmlApplicationEngine
如果名称=“\uuuuu main\uuuuuuuu”:
app=qgui应用程序(sys.argv)
引擎=QQmlApplicationEngine()
filename=os.path.join(os.path.dirname(os.path.realpath(_文件__)),“main.qml”)
engine.load(QUrl.fromLocalFile(文件名))
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
            }
        }
    }
}