2013-06-28 67 views
0

我想在QScrollArea(只有一個部件)內放置QtableWidget,以便能夠垂直和水平滾動(我有理由不使用Qtablewidget中的滾動條)。但是,即使tableWidget無法放入窗口中,也不會出現滾動條,所以我設置了QtCore.Qt.ScrollBarAlwaysOn,現在它們在那裏,但它們是灰色的,仍然不能滾動。QScrollArea不會滾動

這裏是我的代碼:

class Table(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Table, self).__init__(parent) 
     layout = QtGui.QGridLayout() 
     tableWidget = QtGui.QTableWidget() 
     #.... set up and populate tableWidget here 1000rows-10col .... 
     myScrollArea = QtGui.QScrollArea() 
     myScrollArea.setWidgetResizable(True) 
     myScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     myScrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     myScrollArea.setWidget(tableWidget) 
     layout.addWidget(myScrollArea) 
     self.setLayout(layout) 
     self.setMinimumSize(1000, 700) 

我是初學者與PyQt的,我真的不明白的佈局和容器,所以我不能找出我做錯了。請指點正確的方向,幫助將不勝感激。

回答

0

我終於明白: 我用resizeColumnsToContents()resizeRowsToContents()使列/錶行調整到數據 - 文本,但並沒有對錶本身同樣的事情 - 表格高度和寬度保持不變。因此,爲了使表我用這個行和列周圍的大小:

self.table.resizeRowsToContents() 
self.table.resizeColumnsToContents() 
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length()) 

,現在我可以通過整個表QScrollArea的滾動條滾動。

1

QtScrollBar默認具有水平和垂直滾動條。 tablewidget默認具有水平和垂直滾動條。所以我已經把它關掉了。 只使用resize事件我調整了tablewidget的寬度和高度。

class MainWin(QtGui.QDialog): 
def __init__(self,parent=None): 
    QtGui.QDialog.__init__(self,parent) 

    self.table =QtGui.QTableWidget(100,4) 
    self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 
    self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) 

    lay = QtGui.QGridLayout() 
    self.sc = QtGui.QScrollArea() 
    self.sc.setWidget(self.table) 
    lay.addWidget(self.sc,0,0) 
    self.setLayout(lay) 


def resizeEvent(self,event): 
    self.table.resize(self.sc.width(),self.sc.height()) 




def main(): 
    app=QtGui.QApplication(sys.argv) 
    win=MainWin() 
    win.show() 
    sys.exit(app.exec_()) 

main() 
+0

謝謝你的回答。我也爲你的桌子做過ScrollBarAlwaysOff。當我運行你的代碼時,我可以看到QScrollArea的滾動條和5行,但我只能向下滾動才能看到另一行。 我使用PyQt4和Python 2.6。 你能用你的代碼向下滾動到所有100行嗎? 請幫我,這讓我頭疼一陣子 – Aleksandar

+0

哦,我忘記提到我需要在填充表之後使用'self.table.resizeRowsToContents()'和'self.table.resizeColumnsToContents()' – Aleksandar