在 QSplitter 中带有 QWidget 的 QScrollArea

Posted

技术标签:

【中文标题】在 QSplitter 中带有 QWidget 的 QScrollArea【英文标题】:QScrollArea with a QWidget in a QSplitter 【发布时间】:2015-11-30 17:17:33 【问题描述】:

我正在为我的班级制作一个项目,我需要在一个小部件中放置一个 scrollArea(我选择了一个拆分器),我想按下一个按钮并在这个小部件中创建更多 scrollArea。这就是我所做的:

我这样创建按钮:

self.AddCanal = QAction(QIcon(), "Add channel", self, shortcut = "Shift+Ctrl+c", triggered = self.addChannel)

我把它放在QToolBar()

然后,我创建了scrollArea。我将带有Qwidget 的滚动区域(在这种情况下我使用QwtPlot)放在QSplittersplitter1)中,然后我将一个框架和分离器放在另一个分离器(splitter2)中。最后,我将splitter2 和另一帧放入最后一个拆分器(splitter3)。你可以在这里看到它:

self.scrollLayout = QFormLayout()
self.canal = QwtPlot()
self.canal.setLayout(self.scrollLayout)
self.scrollArea = QScrollArea()
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setWidget(self.canal)

self.scrollArea = QScrollArea()
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setWidget(self.canal)

splitter2 = QSplitter(Qt.Horizontal)
splitter2.addWidget(self.frame)
splitter2.addWidget(splitter1)

splitter3 = QSplitter(Qt.Vertical)
splitter3.addWidget(splitter2)
splitter3.addWidget(self.frame_3)

我是这样做的,因为我会在一个框架中放置一个树小部件,而在底部框架中我将放置一个QtextEdit()

好吧,现在我需要该按钮,当单击它时,会在 splitter1 中创建另一个 scrollArea。我想创建至少 5 个额外的scrollAreas

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

我通过创建这样的方法来解决它:

def addChannel(self):
    global channelCount
    self.scrollLayout = QFormLayout()

    self.canal = QwtPlot()
    self.canal.setLayout(self.scrollLayout)

    self.scrollArea = QScrollArea()
    self.scrollArea.setWidgetResizable(True)
    self.scrollArea.setWidget(self.canal)

    if channelCount <= 5:           
        self.splitter1.addWidget(self.scrollArea)
        channelCount += 1
        return channelCount

使用“channelCount”作为全局变量,从 1 开始,只是因为我只想要 5。

我补充一下:

self.addchannel()

QMainWindow 班级

希望它可以帮助某人。

【讨论】:

以上是关于在 QSplitter 中带有 QWidget 的 QScrollArea的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 学习记录010:QSplitter

QSplitter 未正确设置大小

在 QSplitter PyQt 应用程序中设置 QTabWidget 的初始大小

用鼠标改变 QWidget 的宽度

QWidget 在另一个小部件上

QSplitter 显示两个小部件之间的分隔线或边距