【发布时间】:2017-01-07 10:36:57
【问题描述】:
我想在每次循环迭代时同时更新 QTableWidget,因为表格中插入了一行
我需要它,因为如果我在循环结束后等待更改显示,则几乎需要永远这样做,因为有数百行被插入到表中,所以我想查看表中的行在循环的每次迭代中插入。
这是表定义
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)
当按下按钮时触发循环,它也会冻结整个 GUI
事件处理器的定义如下:
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)
【问题讨论】:
-
真的需要经常更新吗?如果您将每次迭代都插入一个表,这将不会很快奏效。最好只用更多的表来更新表。也许也是因为python。到目前为止,我知道 python 很适合编程,但性能更差。
-
这是因为有一个停止按钮也可以在需要时停止此操作,所以如果按下停止按钮,它需要显示插入的行。
-
@ArthurM。不,插入所有行并什么都不显示是不是要花很长时间
-
我是否理解正确,当时所有数据都可用?
-
我想说的是,在使用 setItem() 方法在表中设置项目后,它应该在应用程序执行时显示插入到 GUI 中的单元格。
标签: python-3.x pyqt5 qtablewidget