首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将QScrollArea用于一个或多个QGroupBox?

如何将QScrollArea用于一个或多个QGroupBox?
EN

Stack Overflow用户
提问于 2017-12-21 18:25:24
回答 1查看 8.8K关注 0票数 3

我一直试图将一个/多个QGroupBox插入到一个QScrollArea中。

问题是:滚动条没有显示.

这是我的代码:

代码语言:javascript
运行
复制
# -*- coding: utf-8 -*-

from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QCheckBox
from PyQt5.QtWidgets import QGroupBox
from PyQt5.QtWidgets import QScrollArea

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QGridLayout

import sys

lst = [u"D", u"E", u"EF", u"F", u"FG", u"G", u"H", u"JS", u"J", u"K", u"M", u"P", u"R", u"S", u"T", u"U", u"V", u"X", u"Y", u"Z"]

class MyApp(QWidget):
    def __init__(self):
        super(MyApp, self).__init__()

        window_width = 1200
        window_height = 600
        self.setFixedSize(window_width, window_height)

        self.initUI()

    def createLayout_group(self):
        self.groupbox = QGroupBox(u"Group1:")
        self.layout_groupbox = QVBoxLayout()

        for i in range(len(lst)):
            self.item = QCheckBox(lst[i], self.groupbox)
            self.layout_groupbox.addWidget(self.item)
        self.layout_groupbox.addStretch(1)

        self.groupbox.setLayout(self.layout_groupbox)


    def createLayout_Container(self):

        self.scrollarea = QScrollArea(self)
        self.scrollarea.setFixedSize(250, 6000)
        self.scrollarea.setWidgetResizable(False)

        self.layout_SArea = QVBoxLayout()
        self.layout_SArea.addWidget(self.groupbox)
        self.layout_SArea.addWidget(self.groupbox) # add groupbox one more to test
        self.layout_SArea.addWidget(self.groupbox) # add groupbox one more to test
        self.layout_SArea.addStretch(1)

        self.scrollarea.setLayout(self.layout_SArea)



    def initUI(self):
        self.createLayout_group()   # load one groupbox
        self.createLayout_Container()  # load groupbox container

        self.layout_All = QVBoxLayout()
        self.layout_All.addWidget(self.scrollarea)
        self.setLayout(self.layout_All)

        self.show()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    sys.exit(app.exec_())

我想达到这个效果。(仅用于表示)但是上面的代码没有显示滚动体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 18:47:16

您的代码有以下问题:

  • 您不必向QScrollArea添加布局,您必须传递的是一个小部件,因此您构建的布局必须添加到一个小部件中,并且这个小部件必须设置为QScrollArea。
  • 每次调用createLayout_group时,您都要覆盖类self.groupbox、self.layout_groupbox等的成员,这是不必要的,并且可能导致问题,该方法返回QGroupBox是正确的。
  • 另一个错误是,如果使用setWidgetResizable(False),内部小部件就会收缩,这是不愉快的。
  • 另一个问题是,您不应该设置固定的大小,而应该只设置固定的宽度,如果要设置固定的大小,则应该使滚动条始终可见。
代码语言:javascript
运行
复制
lst = [u"D", u"E", u"EF", u"F", u"FG", u"G", u"H", u"JS", u"J", u"K", u"M", u"P", u"R", u"S", u"T", u"U", u"V", u"X", u"Y", u"Z"]

class MyApp(QWidget):
    def __init__(self):
        super(MyApp, self).__init__()
        window_width = 1200
        window_height = 600
        self.setFixedSize(window_width, window_height)
        self.initUI()

    def createLayout_group(self, number):
        sgroupbox = QGroupBox("Group{}:".format(number), self)
        layout_groupbox = QVBoxLayout(sgroupbox)
        for i in range(len(lst)):
            item = QCheckBox(lst[i], sgroupbox)
            layout_groupbox.addWidget(item)
        layout_groupbox.addStretch(1)
        return sgroupbox

    def createLayout_Container(self):
        self.scrollarea = QScrollArea(self)
        self.scrollarea.setFixedWidth(250)
        self.scrollarea.setWidgetResizable(True)

        widget = QWidget()
        self.scrollarea.setWidget(widget)
        self.layout_SArea = QVBoxLayout(widget)

        for i in range(5):
            self.layout_SArea.addWidget(self.createLayout_group(i))
        self.layout_SArea.addStretch(1)

    def initUI(self):
        self.createLayout_Container()
        self.layout_All = QVBoxLayout(self)
        self.layout_All.addWidget(self.scrollarea)
        self.show()

输出:

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47930677

复制
相关文章

相似问题

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