我正在使用pyqt,我有以下目录结构:
root
----> apps/
----> ui/
我在app文件夹中有一个简单的基于qml的应用程序:
应用/ testqt.py
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView, QQuickWindow
from PyQt5.QtQml import qmlRegisterType, QQmlApplicationEngine
import sys
app = QApplication(sys.argv)
engine = QQmlApplicationEngine('ui/window.qml')
topLevel = engine.rootObjects()[0]
win = QQuickWindow(topLevel)
win.show()
app.exec_()
UI / window.qml
qml文件定义应用程序窗口并使用StackView,如下所示:
import QtQuick 2.0
import QtQuick.Window 2.1
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
ApplicationWindow {
id: rootWindow
objectName: "window"
visible: true
width: 800
height: 480
title: "Window"
Component.onCompleted: {
setX(Screen.width / 2 - width / 2);
setY(Screen.height / 2 - height / 2);
}
property Component loginView: LoginView {}
StackView {
id: stackView
anchors.fill: parent
Component.onCompleted:
{
stackView.push(loginView)
}
}
}
这使用LoginView
组件,该组件定义为:
应用/ LoginView.qml
import QtQuick 2.0
import QtQuick.Window 2.1
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.0
ControlView {
ColumnLayout {
anchors.centerIn: parent
spacing: 25
width: 200
TextField {
id: username_fld
placeholderText: qsTr("User name")
Layout.fillWidth: true
}
TextField {
id: password_fld
placeholderText: qsTr("Password")
Layout.fillWidth: true
echoMode: TextInput.Password
}
RowLayout {
Button {
id: login_button
text: "Log In"
Layout.fillWidth: true
}
Button {
id: cancel_button
text: "Cancel"
Layout.fillWidth: true
}
}
}
}
现在当我使用qmlscene
时,视图加载就好了。但是,运行python会导致应用程序在尝试加载QQmlApplicationEngine
时挂起。我觉得它可能与qml路径有关,所以我将import ../ui
包含在window.qml
导入中,但这并没有改变任何东西。
我在Anaconda环境中使用Python 2.7
和Qt 5.6
。 Qt是从这里安装的:https://anaconda.org/anaconda/pyqt
答案 0 :(得分:0)
同样,我使用多个qml文件和多个python文件。当我访问应用程序时,它成功加载了两个qml文件,但是当通过第三个qml页面堆叠时,应用程序崩溃了。它会引发分段错误。
我使用Stackview来推送和弹出QML页面,在调试过程中我发现只有两页的推送和弹出才有效。
如果我也使用Swipeview,我也遇到过。我猜想创建的引擎可以加载两个堆栈QML文件。