QScrollArea不会滚动
问题描述:
我想在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的,我真的不明白的布局和容器,所以我不能找出我做错了。请指点正确的方向,帮助将不胜感激。
答
我终于明白: 我用resizeColumnsToContents()
和resizeRowsToContents()
使列/表行调整到数据 - 文本,但并没有对表本身同样的事情 - 表格高度和宽度保持不变。因此,为了使表我用这个行和列周围的大小:
self.table.resizeRowsToContents()
self.table.resizeColumnsToContents()
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length())
,现在我可以通过整个表QScrollArea的滚动条滚动。
答
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()
谢谢你的回答。我也为你的桌子做过ScrollBarAlwaysOff。当我运行你的代码时,我可以看到QScrollArea的滚动条和5行,但我只能向下滚动才能看到另一行。 我使用PyQt4和Python 2.6。 你能用你的代码向下滚动到所有100行吗? 请帮我,这让我头疼一阵子 – Aleksandar
哦,我忘记提到我需要在填充表之后使用'self.table.resizeRowsToContents()'和'self.table.resizeColumnsToContents()' – Aleksandar