Q_ARG缺少PySide - 如何进行?

时间:2014-05-20 10:36:28

标签: python pyside

我遇到了使用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):

有没有人建议如何解决这个问题? 我不确定为什么它找不到目标方法..

1 个答案:

答案 0 :(得分:2)

这似乎是PySide中的一个错误。 invokeMethod目前在PySide中的参数不起作用。使用QtCore.QTimer.singleshot(..)或发送事件或发出信号。

在此处查看我的问题QMetaObject::invokeMethod doesn't find methods with parameters。你也应该在QGenericArgument中使用QString而不是str,但Python会崩溃。