I want to simultaneously update the QTableWidget with each iteration of loop as a row is inserted in the table
I need that because if I wait for for changes to show up after the loop ends it takes almost forever to do that because there are hundreds of rows are being inserted into the table so I want to see the rows in the table being inserted with each iteration of the loop.
Here is the table definition
self.tableResults = QtWidgets.QTableWidget(self)
self.tableResults.setGeometry(10, 10, 580, 300)
self.tableResults.setColumnCount(7)
self.tableResults.setHorizontalHeaderLabels(["Game Number" , "Game Name" , "Date" , "First" , "Second" , "Third" , "Fourth"])
self.tableResults.setUpdatesEnabled(True)
The loop is triggered when a button is pressed and it also freezes the whole GUI
The definition of the event handler is as follows:
def btnStartClick(self):
startYear = self.startDatePicker.date().year();
startMonth = self.startDatePicker.date().month();
startDay = self.startDatePicker.date().day();
startDate = date(startYear,startMonth,startDay)
endYear = self.endDatePicker.date().year();
endMonth = self.endDatePicker.date().month();
endDay = self.endDatePicker.date().day();
endDate = date(endYear,endMonth,endDay)
delta = endDate - startDate
gameResults = []
for i in range(delta.days + 1):
tdate = startDate + td(days=i)
resultDate = tdate.strftime("%m/%d/%y")
results = getResults(resultDate)
for gameId in results:
self.tableResults.insertRow(self.tableResults.rowCount())
gameResult = getGameResult(gameId,date)
self.tableResults.model().setItem(self.tableResults.rowCount() , 0 , QtWidgets.QTableWidgetItem(str(gameResult.gameNumber)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 1 , QtWidgets.QTableWidgetItem(str(gameResult.gameName)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 2 , QtWidgets.QTableWidgetItem(str(gameResult.date)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 3 , QtWidgets.QTableWidgetItem(str(gameResult.first)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 4 , QtWidgets.QTableWidgetItem(str(gameResult.second)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 5 , QtWidgets.QTableWidgetItem(str(gameResult.third)))
self.tableResults.model().setItem(self.tableResults.rowCount() , 6 , QtWidgets.QTableWidgetItem(str(gameResult.fourth)))
gameResults.append(gameResult)
print(gameResults)
I solved it with the
repaint()
method ofQtWidgets.QListView
: