首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QScrollArea中的PyQt QScrollArea

QScrollArea中的PyQt QScrollArea
EN

Stack Overflow用户
提问于 2015-04-12 06:45:21
回答 1查看 1.9K关注 0票数 0

我正在尝试使用多个带有文本的水平子QScrollAreas和一个垂直容器QScrollArea。这个想法是,在水平子QScrollAreas中的文本区域将始终具有相等的垂直高度,我希望有一个垂直QScrollArea来控制其中的数据。

下面的代码显示水平的子QScrollAreas可以工作,但是垂直的QScrollArea没有检测到在它里面的小部件中编辑的线条不适合垂直。如果我改变了

代码语言:javascript
运行
复制
scroll.setWidgetResizable(True) 

对于垂直QScrollArea为False,垂直QScrollArea检测到里面的小部件不合适,但我希望能够上下滚动所有的lineEdits,而不是父小部件。另外,我希望所有滚动条总是可见的。这个是可能的吗?

代码语言:javascript
运行
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Widget(QWidget):
    def __init__(self, parent= None):
        super(Widget, self).__init__()
        self.setGeometry(100, 100, 400, 400)
        baseWidget = QWidget()
        hBox = QHBoxLayout()
        hBox.addWidget(self.getWidget())
        hBox.addWidget(self.getWidget())
        baseWidget.setLayout(hBox)
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        #when set to False all scrolls are not visible and can only scroll parent widget not the data areas
        scroll.setWidgetResizable(True)
        scroll.setWidget(baseWidget)
        vBox = QHBoxLayout()
        vBox.addWidget(scroll)
        self.setLayout(vBox)

    def getWidget(self):      
        widget = QWidget()
        layout = QVBoxLayout()
        for i in range(20):
            lineEdit = QLineEdit("row: "+str(i)+" data: "+str(list(range(10))))
            lineEdit.setMinimumWidth(250)
            layout.addWidget(lineEdit)
        widget.setLayout(layout)
        scroll = QScrollArea()
        scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setWidgetResizable(False)
        scroll.setWidget(widget)
        return scroll

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = Widget()
    dialog.show()
EN

回答 1

Stack Overflow用户

发布于 2015-04-12 09:26:48

答案可以在这里找到:

PyQt4 : is there any signal related to scrollbar?

只需要同步垂直滚动条并隐藏除一个之外的所有滚动条:

代码语言:javascript
运行
复制
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Widget(QWidget):

    def __init__(self, parent= None):
        super(Widget, self).__init__()
        self.setGeometry(100, 100, 200, 200)
        baseWidget = QWidget()
        hBox = QHBoxLayout()
        lscrollArea = self.getWidget(False)
        rScrollArea = self.getWidget(True)
        rScrollArea.verticalScrollBar().valueChanged.connect(
        lscrollArea.verticalScrollBar().setValue)
        hBox.addWidget(lscrollArea)
        hBox.addWidget(rScrollArea)
        baseWidget.setLayout(hBox)
        vBox = QHBoxLayout()
        vBox.addWidget(baseWidget)
        self.setLayout(vBox)

    def getWidget(self, vScrollOn):      
        widget = QWidget()
        layout = QVBoxLayout()
        for i in range(20):
            lineEdit = QLineEdit("row: "+str(i)+" data: "+str(list(range(10))))
            lineEdit.setMinimumWidth(250)
            layout.addWidget(lineEdit)
        widget.setLayout(layout)
        scroll = QScrollArea()
        if vScrollOn:
            scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        else:
            scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        scroll.setWidgetResizable(False)
        scroll.setWidget(widget)
        return scroll

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = Widget()
    dialog.show()
    app.exec_()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29583927

复制
相关文章

相似问题

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