从Python调用QML函数

丹妮

我需要从QML中获取信息(在这种情况下是从textInput),对其进行一些操作,并取决于操作结果是什么调用QML中的适当功能。我知道如何从textInput获取文本,但是根据结果,无法找到如何响应。这是我的代码:

main.qml:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    TextInput {
        id: textInput
        x: 280
        y: 230
        width: 80
        height: 20
        text: qsTr("Text Input")
        font.pixelSize: 12
        horizontalAlignment: Text.AlignHCenter
        selectByMouse: true
    }

    Dialog {
        id: dialog1
        modal: true
        title: "OK"
        Text {text: "Everything is OK!"}
        x: parent.width/2 - width/2
        y: parent.height/2 - height/2
    }

    Dialog {
        id: dialog2
        modal: true
        title: "ERROR"
        Text {text: "Check Internet connection!"}
        x: parent.width/2 - width/2
        y: parent.height/2 - height/2
    }

    Button {
        id: button
        x: 270
        y: 318
        text: qsTr("Check")
        onClicked: {
            bridge.check_tI(textInput.text)
        }
    }
}

main.py:

import sys
import os

from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QObject, Slot, Signal, Property

class Bridge(QObject):

    @Slot(str)
    def check_tI(self, tf_text):
        try:
            # SOME OPERATIONS
            # MUST BE DONE IN PYTHON
            # IF EVERYTHING OK:
            # dialog1.open()
            print("OK! ", tf_text)
        except:
            # dialog2.open()
            print("ERROR! ", tf_text)



if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()

    bridge = Bridge()
    engine.rootContext().setContextProperty("bridge", bridge)

    engine.load(os.path.join(os.path.dirname(__file__), "main.qml"))

    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())
永乐

一种可能是返回一个布尔值,该布尔值可用于决定显示一个或另一个对话框。

class Bridge(QObject):
    @Slot(str, result=bool)
    def check_tI(self, tf_text):
        try:
            # trivial demo
            import random

            assert random.randint(0, 10) % 2 == 0
            print("OK! ", tf_text)
        except:
            print("ERROR! ", tf_text)
            return False
        else:
            return True
onClicked: {
    if(bridge.check_tI(textInput.text)){
        dialog1.open()
    }
    else{
        dialog2.open()
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法调用 QML 函数

来自分类Dev

从调用的Python QML方法

来自分类Dev

使用QML调用虚拟C ++函数

来自分类Dev

QMetaObject :: invokeMethod无法调用QML / JS函数

来自分类Dev

从函数python调用函数

来自分类Dev

QML ReferenceError:<something>不是从qml文件调用的Js函数定义的

来自分类Dev

在函数中调用函数 - Python

来自分类Dev

从主python调用函数

来自分类Dev

从C ++调用Python函数

来自分类Dev

python递归函数调用

来自分类Dev

从python调用php函数

来自分类Dev

从Python调用C ++函数

来自分类Dev

Python基本函数调用

来自分类Dev

从 HTML 调用 Python 函数

来自分类Dev

QML画布-为什么requestPaint()函数未调用绘制?

来自分类Dev

QML:在ListView中调用的ListElement中定义函数

来自分类Dev

QML:在ListView中调用的ListElement中定义函数

来自分类Dev

QML画布-为什么requestPaint()函数没有调用画图?

来自分类Dev

QML动画完成后调用C ++函数

来自分类Dev

如何从另一个QML文件调用QML文件中定义的Javascript函数?

来自分类Dev

在QML中的TabView内的另一个QML文件中调用函数或属性

来自分类Dev

如何从另一个QML文件调用QML文件中定义的Javascript函数?

来自分类Dev

使用另一个QML对象作为参数从C ++调用QML函数

来自分类Dev

QML ReferenceError:<something>不是从QML文件中调用的Js函数定义的

来自分类Dev

从Python调用Cython C函数

来自分类Dev

短路时的python调用函数

来自分类Dev

Python:从导入的文件调用函数

来自分类Dev

在python中调用citeparser函数

来自分类Dev

python中的自调用函数