Эквивалент PyQt_PyObject при использовании сигналов / слотов нового стиля? - PullRequest
8 голосов
/ 21 сентября 2010

Так что мне нужно передать массив в моем приложении PyQt. Сначала я попытался использовать сигналы / слоты нового стиля, определив мой сигнал с помощью:

newChunkToProcess = pyqtSignal(np.array()), однако это дает ошибку: Ошибка типа: Обязательный аргумент 'объект' (позиция 1) не найден

Я разработал, как это сделать с сигналами и слотами старого стиля, используя self.emit(SIGNAL("newChunkToProcess(PyQt_PyObject)"), np.array([5,1,2])) - (да, это просто тестирование данных :), но мне было интересно, возможно ли это сделать с помощью системы нового стиля?

Ответы [ 2 ]

15 голосов
/ 03 марта 2011

Тип, который вы ищете, это np.ndarray Вы можете сказать это по следующему коду:

>>> arr = np.array([])  # create an array instance
>>> type(arr)           # ask 'what type is this object?'
<type 'numpy.ndarray'>

Таким образом, ваш сигнал должен выглядеть примерно так:

newChunkToProcess = pyqtSignal(np.ndarray)

(обратите внимание, что я передаю тип np.ndarray, а не массив экземпляр , как вы пытались). Если вы не хотите беспокоиться о типе аргумента, вы можете вместо этого использовать:

newChunkToProcess = pyqtSignal(object)

Это должно позволить вам отправлять данные любого типа через сигнал.

Также: numpy и Qt не делятся какими-либо основными функциями, которые я знаю. На самом деле, эти два довольно дополняют друг друга и составляют очень мощную комбинацию.

0 голосов
/ 28 сентября 2010

Вы делаете это неправильно. Вы должны передать тип объекта данных: int, str, ... в вашем списке дел

Как и я:

images = pyqtSignal(int, str);
failed = pyqtSignal(str, str);
finished = pyqtSignal(int)
...