Python 和 QML 上的多页
Posted
技术标签:
【中文标题】Python 和 QML 上的多页【英文标题】:Multiple Page on Python and QML 【发布时间】:2017-08-21 21:41:19 【问题描述】:我是 python 和 qml 编程的初学者,我正在做一个项目 我的项目需要有很多 UI 表单我正在使用 qml 来创建这些 UI
假设我们有表格 A、B、C,当应用程序加载时,我需要它来打开表格 A,表格 A 包含我单击并打开表格 B 和表格 A 的按钮,表格 B 它有我单击它的按钮打开表格 C 和表格 B 关闭...请帮助我完成这些项目
main.py
import sys
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
ctx = engine.rootContext()
ctx.setContextProperty("main", engine)
ctx2 = engine.rootContext()
ctx2.setContextProperty("main", engine)
engine.load('form1.qml')
win = engine.rootObjects()[0]
def pageC():
engine.load('form3.qml')
win2 = engine.rootObjects()[0]
button1 = win2.findChild(QObject, "form3")
button1.clicked.connect(pageC)
win2.show()
def newPage():
engine.load('form2.qml')
win = engine.rootObjects()[0]
win.show()
button1=win.findChild(QObject, "form2")
button1.clicked.connect(newPage)
win.show()
sys.exit(app.exec_())
form1.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.5
Window
visible: true
width: 200
height: 200
title: qsTr("Hello World")
maximumHeight: 200
minimumHeight: 200
maximumWidth: 200
minimumWidth: 200
Button
id: button1
objectName: "form2"
x: 22
y: 71
width: 157
height: 59
text: qsTr("Page a")
onClicked: callPageB()
form2.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.5
Window
visible: true
width: 200
height: 200
title: qsTr("Hello World")
maximumHeight: 200
minimumHeight: 200
maximumWidth: 200
minimumWidth: 200
Button
id: button1
objectName: "form3"
x: 22
y: 71
width: 157
height: 59
text: qsTr("Page B")
onClicked: callPageC()
form3.qml
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.5
Window
visible: true
width: 200
height: 200
title: qsTr("Hello World")
maximumHeight: 200
minimumHeight: 200
maximumWidth: 200
minimumWidth: 200
Button
id: button1
x: 22
y: 71
width: 157
height: 59
text: qsTr("Page C")
【问题讨论】:
你想让我对上一个窗口做什么?要关闭它吗? 是的,我想关闭 【参考方案1】:将qmls添加到QQmlApplicationEngine
我们可以通过rootObjects()
,所以我只是创建了以下类,但是有一定的限制,Window内的每个按钮都应该有objectName
作为名称该文件并且必须是 Window 的子项:
example.qml:
Window
...
Button
objectName: "example"
...
在下一部分这个类与你的 qmls 的名称。
class Engine(QQmlApplicationEngine):
counter = 0
def __init__(self, qmls, parent=None):
QQmlApplicationEngine.__init__(self, parent)
[self.load(".qml".format(qml)) for qml in qmls]
for i, root in enumerate(self.rootObjects()):
if root != self.rootObjects()[0]:
root.close()
if root != self.rootObjects()[-1]:
button= root.findChild(QObject, qmls[i])
button.clicked.connect(self.closeAndOpen)
def closeAndOpen(self):
self.rootObjects()[self.counter].close()
self.counter += 1
self.rootObjects()[self.counter].show()
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = Engine(['form1', 'form2', 'form3'])
sys.exit(app.exec_())
【讨论】:
我有另一个问题我创建了登录页面,当用户登录遇到具有下一个表单按钮的仪表板时启动,但是当我添加这些解决方案时它可以正常工作但是当我单击按钮时调用openCv相机它不起作用你能帮我解决这个问题吗..以上是关于Python 和 QML 上的多页的主要内容,如果未能解决你的问题,请参考以下文章
Python Web-scraping多页表到csv和DF进行分析