Проблема QTableView с selectionModel()

#pyqt #qtableview #selectionmodel

#pyqt #qtableview #selectionmodel

Вопрос:

У меня проблема с моим вызовом QTableView.selectionModel(). Я создаю экземпляр своего QTableView в другом классе, затем, когда я открываю новый проект и мне нужно заполнить свое представление, я вызываю функцию fillGrid(), в которой я получаю данные среди прочего. Здесь я также вызываю метод selectionModel().

Все идет хорошо, когда я вызываю это в первый раз. Но если я попытаюсь вызвать его снова в том же экземпляре программы, то это выдаст мне следующую ошибку :

Ошибка типа: объект ‘QItemSelectionModel’ не вызывается

моя функция fillGrid выглядит следующим образом :

 def fillGrid(self):

    self.infos = select.getInfosProject(self.parent.db, self.parent.currentProj)
    self.getData()
    header = ["id","hidden","state","filename","asset-shot name","task","buffer","pass","camera","version","user","date","deps","check","comment","start frame","end frame","missing frames","edit start frame","edit end frame"]
    self.model = SequenceGridModel(self.data, header, self)
    self.setModel(self.model)


    self.hideColumn(0)
    self.hideColumn(1)
    font = QtGui.QFont("Verdana", 8)
    self.setFont(font)
    vh = self.verticalHeader()
    vh.setVisible(False)
    hh = self.horizontalHeader()
    hh.setStretchLastSection(True)
    self.resizeColumnsToContents()

    self.setSelectionBehavior(QtGui.QTableView.SelectRows)
    self.selectionModel = self.selectionModel()
    self.connect(self.selectionModel, QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.getSelection)
    self.setSortingEnabled(True)


    self.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
    self.viewport().installEventFilter(self)
    self.setItemDelegateForColumn(13,ComboBoxDelegate(self, self.checkValues))

    self.setColumnWidth(13, 64)
  

Есть идеи, почему это происходит?
Заранее спасибо

Ответ №1:

Вы присвоили вашему экземпляру QItemSelectionModel имя selectionModel, но selectionModel является методом класса QTableView. Вам нужно выбрать новое имя для вашей модели выбора. Смотрите ссылку на класс QAbstractItemView.

Если вы хотите назначить эту модель выбора для применения к вашей модели, вам необходимо использовать метод setSelectionModel.