プラットフォーム: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のコミュニティ:
完全を期すために、ここで私が読んだが、私を助けていない同様のポストがあります!
これは(http://stackoverflow.com/questions/2585442/sending-custom-pyqt-signals)は、あなたが探している答えが含まれている[以前の質問をし]ていますか? – sytech
PySide-1.2.4を使ってこの問題を再現することはできません。おそらく、CentOS 6はバグのPySideのはるかに古いバージョンを持っています。どのような正確なバージョンを使用していますか? – ekhumoro
@Gator_Python:それはPyQt固有の部分を使用していると私はPySideに固執しています。 – PfunnyGuy