Qt和PyQt tablewidget增加了行数

时间:2012-07-05 21:02:20

标签: python excel qt pyqt rows

我正在学习Python,并试图编写一个程序来帮助我的父亲。 我希望它像excel一样,它现在看起来很棒,但我不知道如何使tableWidget中的行数(而不是列)增长,而有些人则会崩溃... 我可以使用QtDesigner来完成,或者我必须在.py文件中编写代码吗? 任何帮助表示赞赏...... 对不起,如果我问愚蠢的问题,我真的是一个菜鸟......

1 个答案:

答案 0 :(得分: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)信号连接到我们的方法。

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

将其缩小的行为更加复杂,因为我确信你需要检查最后一行以确保它是空的,如果是的话只删除它。我的版本为您提供了粗略的想法,但数学逻辑可能需要更多的工作。但它正在做的是遍历最后一行中的每个项目以查看其None或空值。如果整行为空,则将其删除。因此,在向上滚动时确实会产生降低效果。

希望这能为您提供一个起点!如果您需要更详细的任何部分说明,请随时询问代码。