首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QScrollArea无法滚动

QScrollArea无法滚动
EN

Stack Overflow用户
提问于 2013-06-28 21:29:45
回答 2查看 1.8K关注 0票数 0

我正在尝试将一个QtableWidget放入一个QScrollArea (只有一个小部件)中,以便能够垂直和水平滚动它(我有理由不使用Qtablewidget中的滚动条)。然而,没有滚动条出现,即使tableWidget不能放在窗口中,所以我设置了QtCore.Qt.ScrollBarAlwaysOn,现在它们在那里,但它们是灰色的,我仍然不能滚动。

下面是我的代码:

代码语言:javascript
运行
复制
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一无所知,而且我不太了解布局和容器,所以我不知道我做错了什么。请给我指出正确的方向,感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-01 17:29:35

我终于明白了:我使用了resizeColumnsToContents()resizeRowsToContents()来调整表格的列/行以适应数据文本,但这并不能对表格本身做同样的事情-表格的高度和宽度保持不变。因此,为了使表的大小可以围绕行和列进行调整,我使用了以下代码:

代码语言:javascript
运行
复制
self.table.resizeRowsToContents()
self.table.resizeColumnsToContents()   
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length())

现在我可以用QScrollArea的滚动条滚动整个表格。

票数 0
EN

Stack Overflow用户

发布于 2013-06-29 19:58:19

默认情况下,QtScrollBar具有水平和垂直scrollBar。tablewidget默认有水平和垂直scrollBar。所以我成功了。仅仅使用resize事件,我就调整了tablewidget的宽度和高度。

代码语言:javascript
运行
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17365874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档