如何在pyqt中创建一个滚动区域

问题描述 投票:0回答:2

我正在开发一个高度为300的滚动区域小部件,并在滚动区域中添加QLabel小部件,每个QLabel高度为100。添加两个以上的QLabel时,滚动区域中的QLabel会重叠,并且滚动条不会它表明我无法拉动滚动条。我想将QLabel彼此分开。同时,我可以拉下滚动条以查看剩余的QLabel

from PyQt4 import QtCore
from PyQt4.QtGui import QScrollArea, QLabel, QVBoxLayout
import sys
from PyQt4 import QtGui


class ScrollArea(QScrollArea):
    def __init__(self):
        super(ScrollArea, self).__init__()
        self.setFixedSize(500, 300)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)

        vbox = QVBoxLayout()
        self.setLayout(vbox)
        for i in range(4):
            lb = QLabel('hjkmlasda')
            lb.setStyleSheet("""
              border-width: 1px;
             border-style: solid;
             border-color:blue;
            """)
            lb.setFixedSize(400, 100)
            vbox.addWidget(lb)
            vbox.addStretch(1)


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):
        h = QtGui.QHBoxLayout()
        h.addWidget(ScrollArea())
        self.setLayout(h)

        self.setGeometry(100, 100, 1000, 500)
        self.show()


def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
python pyqt pyqt4
2个回答
0
投票
您不必在QScrollArea中设置布局,而只需设置一个小部件,那么如何放置几个小部件?好吧,您必须使用QWidget作为容器,并通过分配给该容器的布局来设置窗口小部件,还必须启用widgetResizable属性:

class ScrollArea(QtGui.QScrollArea): def __init__(self, parent=None): super(ScrollArea, self).__init__(parent) self.setFixedSize(500, 300) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.setWidgetResizable(True) container = QtGui.QWidget() self.setWidget(container) vbox = QtGui.QVBoxLayout(container) # vbox.setSpacing(0) for i in range(4): lb = QtGui.QLabel("hjkmlasda") lb.setStyleSheet( """ border-width: 1px; border-style: solid; border-color:blue; """ ) lb.setFixedSize(400, 100) vbox.addWidget(lb)


0
投票
您应该为QScrollArea设置可调整大小的小部件,并将布局放置在该小部件上。这样编辑构造函数:

class ScrollArea(QScrollArea): def __init__(self): super(ScrollArea, self).__init__() w = QWidget() self.setWidget(w) self.setWidgetResizable(True) self.setFixedSize(500, 300) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) vbox = QVBoxLayout(w) . . .

© www.soinside.com 2019 - 2024. All rights reserved.