I'm trying to add a checkbox in each row of a qtablewidget. When the table has more than one row, the checkbox is not inserted in the first row. Just in the last one. But the data coming from a db are inserted in every row. Can anyone please explain what I am doing wrong here.
checkbox = QtWidgets.QCheckBox()
income = helper.selectOne("""SELECT En_Kat.ID_En, En_Kat.ID_Kind, En_Kat.Entgelt_Kat, En_Kat.E_Start_Date
From En_Kat WHERE En_Kat.ID_Kind = ?""", (idc, ))
for rowi, i in enumerate(income):
self.ui.incomeTWG.insertRow(rowi)
self.ui.incomeTWG.setCellWidget(rowi,5,checkbox)
for coli, datai in enumerate(i):
celli = QtWidgets.QTableWidgetItem(str(datai))
self.ui.incomeTWG.setItem(rowi,coli,celli)
celli.setTextAlignment(Qt.AlignHCenter)
Now with reproducable code:
import sys
from ui.mainwindow import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
app = QtWidgets.QApplication(sys.argv)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
checkbox = QtWidgets.QCheckBox()
income = (('1', '2'),('3','4'))
for rowi, i in enumerate(income):
self.ui.tableWidget.insertRow(rowi)
self.ui.tableWidget.setCellWidget(rowi,2,checkbox)
for coli, datai in enumerate(i):
celli = QtWidgets.QTableWidgetItem(str(datai))
self.ui.tableWidget.setItem(rowi,coli,celli)
celli.setTextAlignment(Qt.AlignHCenter)
window = MainWindow()
window.show()
sys.exit(app.exec_())
and here is the ui:
efrom PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(230, 160, 351, 192))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "a"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "b"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "c"))