Я столкнулся с проблемой при работе с PySide [Python 3.3.3/PySide 1.2.1] и invokeMethod — похоже, что в PySide не встроен макрос Q_ARG.
QtCore.QMetaObject.invokeMethod(self.worker, '_reader_run_mfoc_dummy',
QtCore.Qt.QueuedConnection,
QtCore.Q_ARG(str, self.get_keys_filename()),
QtCore.Q_ARG(str, self.get_dump_filename()))
возвращает:
QtCore.Q_ARG(str, self.get_keys_filename()),
AttributeError: 'module' object has no attribute 'Q_ARG'
Несмотря на предупреждения из Документов не делать этого, даже если я попытаюсь передать общий аргумент, это не удастся (но по другой причине):
QtCore.QMetaObject.invokeMethod(self.worker, '_reader_run_mfoc_dummy',
QtCore.Qt.QueuedConnection,
QtCore.QGenericArgument("str",self.get_keys_filename()),
QtCore.QGenericArgument("str",self.get_dump_filename()))
QMetaObject::invokeMethod: Нет такого метода Worker::_reader_run_mfoc_dummy(str,str)
Несмотря на то, что моя подпись Slot / Method:
@QtCore.Slot(str, str)
def _reader_run_mfoc_dummy(self, keys_filename, dump_filename):
У кого-нибудь есть предложение о том, как обойти эту проблему? Я не уверен, почему ему не удается найти целевой метод.