Qt和PyQt tablewidget越来越多的行数

我正在学习Python,并试图编写一个程序来帮助我的父亲。 我希望它是excel的样子,现在看起来不错,但我不知道如何使tableWidget中的行数(而不是列)增长,而某些人滚动下来…我可以使用它QtDesigner或我必须在.py文件中写入代码? 任何帮助表示赞赏…对不起,如果我问愚蠢的问题,我真的是一个小白…

这是一个概念validation的例子:

class Widget(QtGui.QWidget): def __init__(self): super(Widget, self).__init__() self.resize(600,400) layout = QtGui.QVBoxLayout(self) self.table = QtGui.QTableWidget(20,10) self.vBar = self.table.verticalScrollBar() self._vBar_lastVal = self.vBar.value() layout.addWidget(self.table) self.vBar.valueChanged.connect(self.scrollbarChanged) def scrollbarChanged(self, val): bar = self.vBar minVal, maxVal = bar.minimum(), bar.maximum() avg = (minVal+maxVal)/2 rowCount = self.table.rowCount() # scrolling down if val > self._vBar_lastVal and val >= avg: self.table.insertRow(rowCount) # scrolling up elif val < self._vBar_lastVal: lastRow = rowCount-1 empty = True for col in xrange(self.table.columnCount()): item = self.table.item(lastRow, col) if item and item.text(): empty=False break if empty: self.table.removeRow(lastRow) self._vBar_lastVal = val 

您必须依靠表格小部件的垂直滚动条来指示有关它改变值的信息。 所以我们把它的valueChanged(int)信号连接到我们的方法。

scrollbarChanged SLOT将接收scrollbarChanged的值。 我在这里做的是检查当时滚动条的最小值和最大值,看看当前位置是否至less在中间。 我们还检查当前的滚动条值是否大于最后一次,因为我们只想在向下滚动条上添加行。 如果这些条件是真的,那么我们插入一个新的行。

收缩它的行为有一点牵强,因为我相信你需要检查最后一行,确保它是空的,如果是这样的话,只删除它。 我的版本给你粗略的想法,但math逻辑可能需要更多的工作。 但是它正在做的是通过最后一行中的每个项目来查看它是否为空值。 如果整行是空的,则将其删除。 因此,在滚动时,您确实会获得减less的效果。

希望这给你一个起点! 如果您需要更详细的解释任何部分,请随时询问代码。