Исчезает виджет из строки таблицы Pyside2

Есть таблица в Pyside2

 self.table_classes =  QtWidgets.QTableWidget()
 self.table_classes.setColumnCount(3)
 self.table_classes.setHorizontalHeaderLabels(['Название класса', 'Цвет',''])
 header_class = self.table_anno.horizontalHeader()
 header_class.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
 header_class.setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
 self.table_classes.setFixedWidth(300)
 self.table_classes.setColumnWidth(2, 50)

В третьей колонке находится кнопка выбора цвета. Строка таблицы добавляется по кнопке "Добавить класс"

введите сюда описание изображения

После того как я добавляю новую строку, то виджет с кнопкой выбора цвета исчезает. И я не могу поменять цвет в строке выше

введите сюда описание изображения

Код добавления строки

    self.button_color = QtWidgets.QPushButton()
    self.button_color.clicked.connect(Form.change_color)
    self.button_color.setFixedWidth(50)
    self.button_color.setIcon(QtGui.QIcon('back2.png'))
    
    def addTableRow_Class(self):
        rows = self.ui.table_classes.rowCount()
        self.ui.table_classes.setRowCount(rows + 1)
        self.ui.table_classes.setCellWidget(rows, 2, self.ui.button_color)

Почему кнопка исчезает из предыдущей строки?


Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

import sys
from PyQt5.Qt import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget)

        self.table_classes =  QTableWidget()
        self.table_classes.setColumnCount(3)
        self.table_classes.setHorizontalHeaderLabels(['Название класса', 'Цвет','btn'])
        self.table_classes.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
        self.table_classes.setColumnWidth(2, 50)

        self.btn_add = QPushButton('Добавить')
        self.btn_add.clicked.connect(self.add_row)
        self.btn_del = QPushButton('Удалить')
        
        layout = QGridLayout(self.centralWidget)
        layout.addWidget(self.table_classes, 0, 0, 4, 1)
        layout.addWidget(self.btn_add, 1, 1)
        layout.addWidget(self.btn_del, 2, 1)

    def add_row(self):
        rowPosition = self.table_classes.rowCount()
        button_color = QPushButton()
        button_color.clicked.connect(lambda: print(rowPosition))
        button_color.setFixedWidth(50)
        button_color.setIcon(QIcon('im.png')) 
        
        self.table_classes.insertRow(rowPosition)
        self.table_classes.setCellWidget(rowPosition, 2, button_color)
        

if __name__ == "__main__":    
    import sys    
    app = QApplication(sys.argv)
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка