2012-07-05 69 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