How to add QComboBox to the first row of a QAbstractTable?

106 Views Asked by At

I would like to add QComboBox with inputs (Id, Name, Year) to the first row of QAbstractTableModel? I tried similar posts How to set data to QComboBox using QAbstractTableModel (Model/View)? and How to add "Select one..." to QComboBox when using QAbstractTableModel (Model/View)?. However, it did not work out (app is crashing all the time). How can I adjust my existing code? I am new to PyQT, any help highly appreciated. Thanks a lot!

My Code

class PandasModel(QtCore.QAbstractTableModel):

    def __init__(self, df = pd.DataFrame(), parent=None):

        QtCore.QAbstractTableModel.__init__(self, parent=parent)
        self._df = df
        row_count = 700
        column_count = 700

    def rowCount(self, parent=QtCore.QModelIndex()):
        return len(self._df.index)

    def columnCount(self, parent=QtCore.QModelIndex()):
        return len(self._df.columns)


    def headerData(self, section, orientation, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return QtCore.QVariant()

        if orientation == QtCore.Qt.Horizontal:
            try:
                return self._df.columns.tolist()[section]
            except (IndexError, ):
                return QtCore.QVariant()
        elif orientation == QtCore.Qt.Vertical:
            try:
                # return self.df.index.tolist()
                return self._df.index.tolist()[section]
            except (IndexError, ):
                return QtCore.QVariant()


    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return QtCore.QVariant()

        if not index.isValid():
            return QtCore.QVariant()

        return QtCore.QVariant(str(self._df.iloc[index.row(), index.column()]))
0

There are 0 best solutions below