2013-06-28 85 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