I have a QT Table Widget where I get data from sql, I wanted to put a combo box to the column 4, 5, 6 and 7 (for now let's do it only for the 4th column). I did it but when I execute the the code my QComboBox is shown only in the last row, this because I have a for cycle that inserts rows in the table and I put the self.table.setCellWidget(row, column, combobox) in this loop, so everytime it's executed it moves the combobox to the last row, how can I have a combo box for each row? Here's my code
def datitabella(self):
delegate = MyDelegate(self)
tablerow = 0
conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
combo = QComboBox()
for p in c.execute("SELECT Customer_code FROM Customers "):
combo.addItem(str(p))
for row in c.execute("SELECT * FROM Viaggi "):
righe = 0
self.tabella_registrazioni.setRowCount(conteggio)
self.tabella_registrazioni.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(str(row[0])))
self.tabella_registrazioni.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(row[1]))
self.tabella_registrazioni.setItem(tablerow, 2, QtWidgets.QTableWidgetItem(row[2]))
self.tabella_registrazioni.setItem(tablerow, 3, QtWidgets.QTableWidgetItem(row[3]))
self.tabella_registrazioni.setItem(tablerow, 4, QtWidgets.QTableWidgetItem(row[4]))
self.tabella_registrazioni.setItem(tablerow, 5, QtWidgets.QTableWidgetItem(row[5]))
self.tabella_registrazioni.setItem(tablerow, 6, QtWidgets.QTableWidgetItem(row[6]))
self.tabella_registrazioni.setItem(tablerow, 7, QtWidgets.QTableWidgetItem(row[7]))
self.tabella_registrazioni.setItem(tablerow, 19, QtWidgets.QTableWidgetItem(str(row[19])))
self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)
tablerow+= 1
self.tabella_registrazioni.itemChanged.connect(self.changeIcon)
self.tabella_registrazioni.setItemDelegateForColumn(0, delegate)
You have to create a new QComboBox for each row:
def datitabella(self):
delegate = MyDelegate(self)
tablerow = 0
conteggio = c.execute('SELECT COUNT(ID) FROM Viaggi').fetchone()[0]
items = []
for p in c.execute("SELECT Customer_code FROM Customers "):
items.append(p[0])
for row in c.execute("SELECT * FROM Viaggi "):
combo = QComboBox()
combo.addItems(items)
# ...
self.tabella_registrazioni.setCellWidget(tablerow, 4, combo)