首页 > 解决方案 > 在 main 中打开一个对话框

问题描述

我想在程序的主体中打开一个对话框文件。我没有错误,但我的对话框没有出现。我想我必须对“QQmlApplicationEngine”说谁是父母,我把父母放在了,但没有附加任何内容。

engine = QQmlApplicationEngine(app) <- app :就像声明谁是父母一样?

主文件

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
try:    
    from PyQt5.QtCore import (
        pyqtProperty, pyqtSignal, pyqtSlot,
        QAbstractListModel, QModelIndex, QObject, Qt, QTimer, QVariant, QMetaObject,
    )
    from PyQt5 import QtGui, QtCore
    from PyQt5.QtGui import QGuiApplication
    from PyQt5.QtQml import QQmlApplicationEngine
    from PyQt5.QtQuick import QQuickView

    import sys

except ImportError as e:
    raise ImportError(e)

class openDialog(object):

    def __init__(self, parent, app):

        engine = QQmlApplicationEngine(app)
        engine.load('dialog.qml')               

        ''' '''
        if not engine.rootObjects():
            sys.exit(app.exec_())

        win = engine.rootObjects()[0]
        ctx = engine.rootContext()

        #ctx.findChild(QObject, "dialog1").setProperty("visible", 1)    
        #win.findChild(QObject, "lbl1").setProperty("text", "toto")     
        #win.findChild(QObject, "dialog1").setProperty("visible", 1)        

        print('dialog')


if __name__ == "__main__":

    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.quit.connect(app.quit)
    context = engine.rootContext()

    engine.load("main.qml")

    if not engine.rootObjects():
        sys.exit(app.exec_())

    win = engine.rootObjects()[0]

    openDialog(win, app)

    sys.exit(app.exec_())    

main.qml

import QtQuick 2.4
import QtQuick.Layouts 1.13
import QtQuick.Controls 2.4
import QtQuick.Dialogs 1.1

ApplicationWindow {
    title: qsTr("WoodMan Training")
    width: 600
    height: 400
    visible: true
}    

对话框.qml

import QtQuick 2.4
import QtQuick.Layouts 1.13
import QtQuick.Controls 2.5
import QtQuick.Dialogs 1.1

Dialog {
    anchors.centerIn: parent

    id: msgDialog
    objectName: "dialog1"
    title: "Title"
    modal: true
    visible:true
    standardButtons: Dialog.Ok

    onAccepted: console.log("Ok clicked")
    onRejected: console.log("Cancel clicked")

    Label {
        objectName: "lbl1"
        text: "un texte"
    }           
}    

标签: pythonpyqtqmlpyqt5

解决方案


推荐阅读