2016-06-28 14 views
0

プラットフォーム:CentOSに6 &のPython 2.6.6PySide&Python:シグナル/スロット経由で辞書を送るには?

私の人生のために、これを行うことについてのすべての例と質問を見た後、私はそれが私のシステム上で動作させることはできません。ほとんどの答えは、PySideの代わりにPyQtを使用しているように見えますが、PySideは私の選択肢ではありません。会社が私に与えたものを使用する必要があります。ここで

は私のメインのGUIアプリケーションからのコードスニペットです:

from PySide import QtCore, QtGui 
class MyGui(QtGui.QMainWindow): 
    @QtCore.Slot(dict) 
    def MySlot(self, data): 
    CodeThatUsesData() 

と信号を発するモジュール:

from PySide.QtCore import * 
from PySide.QtGui import * 
class QListener(QThread): 
    MySignal = Signal(dict) 

def DoSomeWork(self): 
    data = {'a':1, 'b':2} 
    self.MySignal.emit(data) 

そしてもちろん、私は信号を接続するコードを持っているし、スロット:

listener.MySignal.connect(gui.MySlot) 

DoSomeWork()が呼び出されたときにエラーが発生します。これは完全に動作するはずです、私が何を読んでから

QObject::connect: Cannot queue arguments of type 'object' 
(Make sure 'object is registered using qRegisterMetaType().) 

emit()ライン)がこれです。私はPySideのドキュメントがqRegisterMetaTypeの使用を暗示していることを発見しましたが、どこから呼び出すべきかを知ることはできません。 QtCore、QtGui、スタンドアローン、QMainWindow、QThread、QObjectのメンバーではありません。

シグナル/スロットのパラダイムを通過するための有効なタイプとして「オブジェクト」を登録するにはどうすればよいですか?私はQObjectクラス内で辞書をラップしようとしましたが、それは登録エラーを削除しますが、Slot操作は呼び出されませんので、データが実際にどこに行くのか分かりません。

解決策が私を叩いているような気がしますが、「セミコロンがない」とは見えません。私はちょうどそれを共有キューに何かがあることをGUIに示すためにシグナルを使用する準備が整いました。

stackoverflow: sending-custom-pyqt-signals

stackoverflow: Qt: Not registered qRegisterMetaType()

stackoverflow: QObject (QPlainTextEdit) & Multithreading issues

stackoverflow: QObject::connect: Cannot queue arguments of type 'object' in PySide

TIA stackoverflowのコミュニティ:

完全を期すために、ここで私が読んだが、私を助けていない同様のポストがあります!

+0

これは(http://stackoverflow.com/questions/2585442/sending-custom-pyqt-signals)は、あなたが探している答えが含まれている[以前の質問をし]ていますか? – sytech

+1

PySide-1.2.4を使ってこの問題を再現することはできません。おそらく、CentOS 6はバグのPySideのはるかに古いバージョンを持っています。どのような正確なバージョンを使用していますか? – ekhumoro

+0

@Gator_Python:それはPyQt固有の部分を使用していると私はPySideに固執しています。 – PfunnyGuy

答えて

1

以下は、ドキュメントに従って、その方法の場所です。コメントに記載されているように、現在のバージョンでは再現できない問題があるため、PySideを最新バージョンにアップグレードする必要があります。

PySide.QtCore.QSettings.qRegisterMetaType

+0

これはどこから取得していますか? 'qRegisterMetaType'は' QSettings'や他のクラスのメンバ関数ではありません。それはPySideによって実装されていない[QMetaType](http://doc.qt.io/qt-4.8/qmetatype.html)の一部です。何らかの形で 'qRegisterMetaType'を公開しているPySideのバージョンを使用している場合は、バグです。 PyObjectがPySideによってメタタイプシステムに自動的に登録されるので、 'qRegisterMetaType'を実装するためのユースケースはありません。 – ekhumoro

関連する問題