如何在Python

时间:2018-03-15 19:42:22

标签: python qt pyqt qml pyqt5

我使用PyQt将QtQuick集成到我的Python应用程序中。我试图找出在Python unittest框架中测试我的QtQuick Qml页面的最佳方法。我想将一个Qml文件列表传递给某个测试函数,以确保这些文件中没有任何错误/异常。目前我正在尝试将页面加载到QQmlComponent中并检查错误,但我还没有能够将其工作:

def test_qml(self):
    app = QApplication(sys.argv)
    engine = QQmlApplicationEngine()
    rel = "/gui/QT/Page1.qml"
    c = QQmlComponent(engine, QUrl.fromLocalFile(SRC_PATH + os.path.normpath(rel)))
    print(c.errors())

此外,根据我所读到的内容,我认为要通过QQmlComponent获取显示错误,我应该在onStatusChange上捕获一个信号然后检查,这对我来说这似乎是错误的方法。尝试在Python中测试qml页面的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

据我所知,您希望使错误消息更具可读性。 errors()方法返回QQmlError的列表,此类的方法可以为我们提供准确的错误信息:

import sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtQml import *

type_error_toString = { 
    QtDebugMsg: "debug", 
    QtInfoMsg : "info", 
    QtWarningMsg : "wargning",
    QtCriticalMsg: "critical",
    QtFatalMsg: "fatal"
}

app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
path = "/path/of/item.qml"
c = QQmlComponent(engine, QUrl.fromLocalFile(path))

if c.isError():
    for error in c.errors():
        print(error.toString())
        print("type: {}, row : {}, column: {}, message: {}"
            .format(
                type_error_toString[error.messageType()],
                error.line(), 
                error.column(),
                error.description())
            )