我正在学习 Python 并尝试编写一个程序来帮助我父亲。我希望它像excel一样,现在看起来很棒,但是我不知道如何使tableWidget中的行数(而不是列)在某人向下滚动时增长...我可以使用QtDesigner 还是我必须在 .py 文件中编写代码?任何帮助表示赞赏......对不起,如果我问愚蠢的问题,我真的是一个菜鸟......
问问题
3902 次
1 回答
1
这是一个概念验证示例:
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)
信号连接到我们的方法。
SLOT将scrollbarChanged
接收滚动条的值。我在这里所做的是检查那一刻滚动条的最小值和最大值,并查看当前位置是否至少在中间。我们还检查当前滚动条值是否大于上次,因为我们只想在向下滚动时添加行。如果这些条件为真,那么我们插入一个新行。
将其缩小回来的行为涉及更多,因为我相信您需要检查最后一行以确保它是空的,并且只有在这样的情况下才将其删除。我的版本给你一个粗略的想法,但数学逻辑可能需要更多的工作。但它正在做的是检查最后一行中的每个项目,看看它是 None 还是空值。如果整行为空,则将其删除。因此,向上滚动时确实会获得减少效果。
希望这能给你一个起点!如果您需要任何部分的更详细说明,请随时询问代码。
于 2012-07-08T05:30:26.347 回答