Q_ARG Липсва от 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)

Въпреки че подписът ми на слот/метод е:

@QtCore.Slot(str, str)
def _reader_run_mfoc_dummy(self, keys_filename, dump_filename):

Някой има ли предложение как да се преодолее този проблем? Не съм сигурен защо не успява да намери целевия метод..


person swx    schedule 20.05.2014    source източник


Отговори (1)


Изглежда, че има грешка в PySide. invokeMethod в момента не работи с аргументи в PySide. Използвайте QtCore.QTimer.singleshot(..) или вместо това изпратете събитие или излъчете сигнал.

Вижте моя въпрос QMetaObject::invokeMethod не намира методи с параметри тук. Също така трябва да използвате QString вместо str в QGenericArgument, но тогава Python ще се срине.

person Trilarion    schedule 22.05.2014
comment
Да, свързаните с qthread неща са наистина бъгови в PySide. PyQt е много по-добър. - person kawing-chiu; 24.09.2016