我遇到了使用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):
有没有人建议如何解决这个问题? 我不确定为什么它找不到目标方法..
答案 0 :(得分:2)
这似乎是PySide中的一个错误。 invokeMethod
目前在PySide中的参数不起作用。使用QtCore.QTimer.singleshot(..)
或发送事件或发出信号。
在此处查看我的问题QMetaObject::invokeMethod doesn't find methods with parameters。你也应该在QGenericArgument中使用QString
而不是str
,但Python会崩溃。