Signalを使用してPythonディクショナリをQMLインターフェイスに送信するにはどうすればよいですか?

Lando1784

qmlオブジェクトを動的に作成するために使用する必要のあるデータを含む辞書をPySide2クラスからQMLインターフェイスに送信したいのですが、特定のイベントに応答して送信する必要があるため、シグナルとスロットを使用する必要があります。

QMLとPythonを使い始めたばかりなので、遊んでみるだけの簡単なプロジェクトを作成しようとしました(コードからわかるように)

QML:

import QtQuick 2.10
import QtQuick.Controls 2.2
import QtQuick.Window 2.2
import QtQuick.Controls.Material 2.3
import QtQuick.Layouts 1.0

ApplicationWindow {
    id: mainWindow
    width:640
    height: 480
    title: qsTr("Simple ui")
    visible: true
    locale:locale
    Rectangle {
        id: appWindow
        objectName: "splasso"
        anchors.fill: parent
        color: "yellow"
        Material.accent: Material.DeepPurple
        Material.primary: Material.Cyan
        Component.onCompleted: function(){
            TestVar.theSignal.connect(catchAnswer);
            testList.append(stuff1);
            testList.append(stuff2);
            testList.append(stuff3);
            testCombo.currentIndex = 0;
            //Just a pointless test print
            console.log(JSON.stringify(stuff1));
        }
        function catchAnswer(answer){
            console.log(JSON.stringify(answer));
        }

        ComboBox{
            id: testCombo
            anchors.centerIn: parent
            width: parent.width
            onCurrentIndexChanged: function(){
                TestVar.catchInt(currentIndex);
            }

            model: ListModel{
                id: testList
            }
        }
    }
}

Python 3:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import os
from time import sleep

from PySide2.QtCore import Qt, QObject, Signal, Slot, Property, QThread
from PySide2.QtWidgets import QApplication    
from PySide2.QtQml import QQmlApplicationEngine

class Test1(QObject):
    theSignal = Signal(dict)
    def __init__(self):
        QObject.__init__(self)

    @Slot(int)
    def catchInt(self,caught):
        print("Caught: {0}".format(caught))
        testDict = {"myAnswer":caught}
        self.theSignal.emit(testDict)


if __name__ == "__main__":
    os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"
    app = QApplication(sys.argv)
    engine = QQmlApplicationEngine()
    stuff1 = {"text":"Trying"}
    stuff2 = {"text":"To send"}
    stuff3 = {"text":"Dict"}
    ctx = engine.rootContext()
    ctxVar = Test1()
    ctx.setContextProperty("stuff1", stuff1)
    ctx.setContextProperty("stuff2", stuff2)
    ctx.setContextProperty("stuff3", stuff3)
    ctx.setContextProperty("TestVar",ctxVar)
    engine.load('main.qml')
    if not engine.rootObjects():
        sys.exit(-1)

    sys.exit(app.exec_())

私が期待した出力(「python3Test_dict_1.py」でスクリプトを起動する)は次のとおりでした。

Caught: 1
qml: {"myAnswer": 1}
Caught: 2
qml: {"myAnswer": 2}
Caught: 1
qml: {"myAnswer": 1}
...etc...

代わりに私が得たのは:

Caught: 1
qml: undefined.
Caught: 2
qml: undefined.
Caught: 1
qml: undefined.
...etc...

私が間違っていることを教えてもらえますか?コードにエラーがありますか、それともこれを行うことができませんか?

eyllanesc

シグナルで使用する必要のある署名はQVariant次のとおりです

class Test1(QObject):
    theSignal = Signal('QVariant')

    @Slot(int)
    def catchInt(self,caught):
        print("Caught: {0}".format(caught))
        testDict = {"myAnswer":caught}
        self.theSignal.emit(testDict)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インデックス付きディクショナリを使用してDataFrameを構築するにはどうすればよいですか?

分類Dev

フィルタカスタムテンプレートを使用して、HTMLファイルからディクショナリ値にアクセスするにはどうすればよいですか?

分類Dev

Webインターフェイスを使用してArangoDBからコレクションを削除するにはどうすればよいですか?

分類Dev

テキストファイルからデータをインポートするときにPythonディクショナリの値をインクリメントするにはどうすればよいですか?

分類Dev

リソースディクショナリでデータテンプレートをバインドするにはどうすればよいですか

分類Dev

反応ネイティブアプリケーションを使用してサーバーにデータを送信し、応答をフェッチするにはどうすればよいですか?

分類Dev

オプションのフィールドを持つ既存のインターフェイスからナロータイプスクリプトインターフェイスを作成するにはどうすればよいですか?

分類Dev

ディープリンク用のタブとナビゲーションコントローラーを使用してビューコントローラーをインスタンス化するにはどうすればよいですか?

分類Dev

QMLシェイプ:データプロパティをクリーンな方法で強制的に更新するにはどうすればよいですか?

分類Dev

インターフェイスを使用してAndroidのアクティビティからフラグメントにデータを送信するにはどうすればよいですか?

分類Dev

Python-playwrightを使用して、ディスクに保存したり一時ファイルを使用したりせずにスクリーンショットを作成するにはどうすればよいですか?

分類Dev

TreeMapを使用して、ディレクトリ内のテキストファイルのコレクションから読み取っているデータをキャッシュするにはどうすればよいですか?

分類Dev

xcodeインターフェイスビルダーを使用してUIButtonにパディングを追加するにはどうすればよいですか?

分類Dev

PythonでMySqlデータを使用してインタラクティブリストを作成するにはどうすればよいですか?

分類Dev

シェルスクリプトを作成してディレクトリを再帰的にスキャンし、名前パターンに基づいて特定のファイルをGitに追加するにはどうすればよいですか?

分類Dev

DDを使用してディスクイメージからパーティションを複製するにはどうすればよいですか?

分類Dev

DDを使用してディスクイメージからパーティションを複製するにはどうすればよいですか?

分類Dev

FreeOfficeインターフェイスを公式のスクリーンショットのようにするにはどうすればよいですか?

分類Dev

インターフェイスをジェネリックとして使用して変数を宣言するにはどうすればよいですか

分類Dev

データバインディングとナビゲーションコンポーネントを使用してネストされたビューにアクセスするにはどうすればよいですか?

分類Dev

bashスクリプトを使用してファイルを別のコンピューターに送信するにはどうすればよいですか?

分類Dev

socket.ioを使用して画像ファイル(バイナリデータ)を送信するにはどうすればよいですか?

分類Dev

C#ディクショナリで定義されたタイプをインポートするにはどうすればよいですか?

分類Dev

Javaリフレクションを使用してprotobufインスタンスを作成するにはどうすればよいですか?

分類Dev

ディクショナリオブジェクトを含むリストの場合、キーの値に基づいてリストをフィルタリングするにはどうすればよいですか?

分類Dev

反応ネイティブボタンをクリックしてデータをWebviewに送信するにはどうすればよいですか?

分類Dev

Swiftのディクショナリから特定のインデックスのキーを取得するにはどうすればよいですか?

分類Dev

リフレクションを使用してインターフェースでインスタンスを作成するにはどうすればよいですか?

分類Dev

Pythonを使用してロイターのウェブサイトのサブセクション(中東など)の20を超えるニュースヘッドラインリンクを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    インデックス付きディクショナリを使用してDataFrameを構築するにはどうすればよいですか?

  2. 2

    フィルタカスタムテンプレートを使用して、HTMLファイルからディクショナリ値にアクセスするにはどうすればよいですか?

  3. 3

    Webインターフェイスを使用してArangoDBからコレクションを削除するにはどうすればよいですか?

  4. 4

    テキストファイルからデータをインポートするときにPythonディクショナリの値をインクリメントするにはどうすればよいですか?

  5. 5

    リソースディクショナリでデータテンプレートをバインドするにはどうすればよいですか

  6. 6

    反応ネイティブアプリケーションを使用してサーバーにデータを送信し、応答をフェッチするにはどうすればよいですか?

  7. 7

    オプションのフィールドを持つ既存のインターフェイスからナロータイプスクリプトインターフェイスを作成するにはどうすればよいですか?

  8. 8

    ディープリンク用のタブとナビゲーションコントローラーを使用してビューコントローラーをインスタンス化するにはどうすればよいですか?

  9. 9

    QMLシェイプ:データプロパティをクリーンな方法で強制的に更新するにはどうすればよいですか?

  10. 10

    インターフェイスを使用してAndroidのアクティビティからフラグメントにデータを送信するにはどうすればよいですか?

  11. 11

    Python-playwrightを使用して、ディスクに保存したり一時ファイルを使用したりせずにスクリーンショットを作成するにはどうすればよいですか?

  12. 12

    TreeMapを使用して、ディレクトリ内のテキストファイルのコレクションから読み取っているデータをキャッシュするにはどうすればよいですか?

  13. 13

    xcodeインターフェイスビルダーを使用してUIButtonにパディングを追加するにはどうすればよいですか?

  14. 14

    PythonでMySqlデータを使用してインタラクティブリストを作成するにはどうすればよいですか?

  15. 15

    シェルスクリプトを作成してディレクトリを再帰的にスキャンし、名前パターンに基づいて特定のファイルをGitに追加するにはどうすればよいですか?

  16. 16

    DDを使用してディスクイメージからパーティションを複製するにはどうすればよいですか?

  17. 17

    DDを使用してディスクイメージからパーティションを複製するにはどうすればよいですか?

  18. 18

    FreeOfficeインターフェイスを公式のスクリーンショットのようにするにはどうすればよいですか?

  19. 19

    インターフェイスをジェネリックとして使用して変数を宣言するにはどうすればよいですか

  20. 20

    データバインディングとナビゲーションコンポーネントを使用してネストされたビューにアクセスするにはどうすればよいですか?

  21. 21

    bashスクリプトを使用してファイルを別のコンピューターに送信するにはどうすればよいですか?

  22. 22

    socket.ioを使用して画像ファイル(バイナリデータ)を送信するにはどうすればよいですか?

  23. 23

    C#ディクショナリで定義されたタイプをインポートするにはどうすればよいですか?

  24. 24

    Javaリフレクションを使用してprotobufインスタンスを作成するにはどうすればよいですか?

  25. 25

    ディクショナリオブジェクトを含むリストの場合、キーの値に基づいてリストをフィルタリングするにはどうすればよいですか?

  26. 26

    反応ネイティブボタンをクリックしてデータをWebviewに送信するにはどうすればよいですか?

  27. 27

    Swiftのディクショナリから特定のインデックスのキーを取得するにはどうすればよいですか?

  28. 28

    リフレクションを使用してインターフェースでインスタンスを作成するにはどうすればよいですか?

  29. 29

    Pythonを使用してロイターのウェブサイトのサブセクション(中東など)の20を超えるニュースヘッドラインリンクを取得するにはどうすればよいですか?

ホットタグ

アーカイブ