2012-07-05 29 views
1

我正在学习Python并试图编写一个程序来帮助我的父亲。 我希望它像excel一样,现在看起来很棒,但我不知道如何让tableWidget中的行数(而不是列数)增长,而某些人可以慢慢下去... 我可以做它使用QtDesigner或我必须在.py文件中编写代码? 任何帮助表示赞赏... 很抱歉,如果我问愚蠢的问题,我的一个小白真的...Qt和PyQt tablewidget越来越多的行数

+1

你必须在代码中完成: -/ – jdi 2012-07-08 04:55:58

回答

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或空值。如果整行是空的,则将其删除。因此,当滚动备份时你确实会减少效果。

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

+0

非常感谢,jdi !!!我研究了你的代码,做了一些修改并且工作!唯一的是,如果你想要一个更“实用”的减少效果,你必须提高“LastRow”的值为20或其他... – Antoni4040 2012-07-08 06:43:32

+0

雅完全。就像我说的,我几乎没有用逻辑进行测试。我认为减速机会很粗糙。您可能也希望在滚动手柄的大小为100%之前停止缩短一些时间,这样可以始终保持超出可见视图的额外行数。这样,你的观点不会缩小到酒吧如此之大,你不能再滚动。 – jdi 2012-07-08 15:51:17