Запуск кода PyQt не открывает окно - PullRequest
0 голосов
/ 20 февраля 2020

Сейчас я прохожу онлайн-курс по 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
            }
        }
    }
}

1 Ответ

0 голосов
/ 20 февраля 2020

Я рекомендую, чтобы при возникновении проблем запустить код из консоли / 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
            }
        }
    }
}
...