Платформа: Centos 6 & Python 2.6.6PySide & Python: Как отправить словарь через Signal/Slot?
После просмотра каждого примера и вопрос о том, делать это для жизни меня я не могу заставить его работать на моей системе. Большинство ответов, похоже, вращаются вокруг, используя PyQt вместо PySide, что для меня не вариант: я должен использовать то, что мне дает компания.
Вот фрагмент кода из моего главного приложения с графическим интерфейсом:
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()
(в частности, при emit()
линия) заключается в следующем:
QObject::connect: Cannot queue arguments of type 'object'
(Make sure 'object is registered using qRegisterMetaType().)
Из того, что я читал, это должно полностью работать. Больше разочаровывает, так как я нашел документацию PySide, ссылающуюся на использование qRegisterMetaType, но я не могу узнать, где ее назвать. Это не в QtCore или QtGui, либо автономно, либо в QMainWindow или QThread или QObject.
Как я могу зарегистрировать «объект» в качестве допустимого типа для прохождения через парадигму Signal/Slot? Я даже попробовал обернуть словарь внутри класса QObject и удаляет регистрационную ошибку, но операция Slot никогда не вызывается, поэтому я не знаю, где данные фактически идут.
Я чувствую, что решение похлопывает меня по лицу, но я не вижу «отсутствующую полуточку». Я готов только использовать сигнал, чтобы указать графическому интерфейсу, что в общей очереди есть что-то, что можно сделать - менее элегантное решение.
Для полноты здесь аналогичные должности, которые я прочитал, но не помогли мне:
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