PySide и Python3: слот с QListWidgetItem выдает неправильный тип?

Я сижу перед проблемой, которая сводит меня с ума. Может быть, это легко, но я не вижу виновника.

У меня есть простой класс, который соединяет сигнал currentItemChanged QListWidget с пользовательским слотом того же класса. Этот сигнал имеет сигнатуру (QListWidgetItem*, QListWidgetItem*) (нет перегруженных сигналов с таким именем). В слоте только один QListWidgetItem, что не должно быть проблемой. См. фрагмент кода:

class Overview(QObject):
    def __init__(self, parent=None)
    #---SNIP---
    item = QListWidgetItem(spec.name)
    item.setData(Qt.UserRole, spec)
    self.ui.listWidget.currentItemChanged.connect(
                    self.showDetails(QListWidgetItem))

    @Slot(QListWidgetItem)
    def showDetails(self, item):
        if item:
            spec = item.data(Qt.UserRole) # <---- PROBLEM

когда я запускаю этот код, я всегда получаю сообщение об ошибке:

---SNIP---
    spec = item.data(Qt.UserRole)
TypeError: descriptor 'data' requires a 'PySide.QtGui.QListWidgetItem' object
but received a 'PySide.QtCore.Qt.ItemDataRole'

Я пробовал все, но я не вижу, в чем здесь проблема. Когда я заполняю print(item) в слоте, он говорит: <class 'PySide.QtGui.QListWidgetItem'> - это совершенно нормально, поэтому полученный «элемент» снова является QListWidgetItem. Вызов метода данных кажется мне правильным - есть у кого-нибудь идея?


person nerdoc    schedule 09.06.2013    source источник


Ответы (1)


МОЙ БОГ. Я был так занят поиском ответа на стороне слота, что не увидел леса среди всех деревьев...

Подпись подключения неверна. Я вызывал слот вместо того, чтобы передавать его обработчику сигнала:

self.ui.listWidget.currentItemChanged.connect(self.showDetails)

решил проблему. Иногда просто хорошо бросить вопрос в дикой природе. Помогает вам сделать шаг назад и забыть о том, что вы сделали ;-)

person nerdoc    schedule 10.06.2013