2024-09-28 03:19:54 发布
网友
我正在学习Python并试图编写一个程序来帮助我爸爸。 我希望它像excel一样,现在看起来很棒,但是我不知道如何让tableWidget中的行数(而不是列)在有人低声低语时增长。。。 我可以用QtDesigner来做还是必须在.py文件中编写代码? 感谢任何帮助。。。 对不起,如果我问的是愚蠢的问题,我真的是个傻瓜。。。在
以下是一个概念验证示例:
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)信号连接到我们的方法。在
valueChanged(int)
scrollbarChanged槽将接收滚动条的值。我在这里做的是检查滚动条的最小值和最大值,看看当前的位置是否至少在中间。我们还检查当前的scrollbar值是否大于上一次,因为我们只想在向下滚动时添加行。如果这些条件为真,则插入新行。在
scrollbarChanged
缩小它的操作要更复杂一些,因为我确信您需要检查最后一行以确保它是空的,并且只有在这样的情况下才删除它。我的版本给了你大致的想法,但是数学逻辑可能需要更多的工作。但它所做的是遍历最后一行中的每一项,看它是无值还是空值。如果整行为空,则将其删除。因此,当你向上滚动时,你会得到一个缩小的效果。在
希望这能给你一个起点!如果您需要对任何部分进行更详细的解释,请随时询问代码。在
以下是一个概念验证示例:
您必须依赖于表小部件的垂直滚动条来显示关于它的值变化的信息。所以我们把它的
valueChanged(int)
信号连接到我们的方法。在scrollbarChanged
槽将接收滚动条的值。我在这里做的是检查滚动条的最小值和最大值,看看当前的位置是否至少在中间。我们还检查当前的scrollbar值是否大于上一次,因为我们只想在向下滚动时添加行。如果这些条件为真,则插入新行。在缩小它的操作要更复杂一些,因为我确信您需要检查最后一行以确保它是空的,并且只有在这样的情况下才删除它。我的版本给了你大致的想法,但是数学逻辑可能需要更多的工作。但它所做的是遍历最后一行中的每一项,看它是无值还是空值。如果整行为空,则将其删除。因此,当你向上滚动时,你会得到一个缩小的效果。在
希望这能给你一个起点!如果您需要对任何部分进行更详细的解释,请随时询问代码。在
相关问题 更多 >
编程相关推荐