如何在 PyQt 中隐藏布局?

Posted

技术标签:

【中文标题】如何在 PyQt 中隐藏布局?【英文标题】:How to hide a layout in PyQt? 【发布时间】:2015-03-26 09:48:31 【问题描述】:

我的代码包含一个垂直框布局,它是左侧的垂直框布局和右侧的垂直框布局的组合。我想知道是否有一种方法可以在发出某个信号时隐藏左侧布局及其所有小部件。

【问题讨论】:

【参考方案1】:

您可以作弊并使用框架而不是布局:它的工作方式完全相同,除了您必须在框架上设置布局才能使其正常工作。然后,您可以执行以下操作:

from PyQt5 import QtWidgets

# create the frame object.
frame = QtWidgets.QFrame()

# you can do this with any layout - vbox, grid, hbox... 
# There will not be more than one item in it anyway.
ly = QtWidgets.QVBoxLayout()
frame.setLayout(ly)

# we're assuming here that parent_layout is some outside layout object.
parent_layout.addWidget(frame)

# hide the frame and its contents
frame.hide()
# show the frame and its contents
frame.show()

我一直在寻找这样的解决方案,希望这会有所帮助:)

【讨论】:

酷!非常感谢! 这行得通!截至 2021 年 1 月 4 日在 pyqt5 中。谢谢! 惊人的答案,值得更多的信任,这基本上是那些欢迎指南的基础,点击一个项目会显示特定的小部件和文本【参考方案2】:

您无法隐藏布局,但可以隐藏小部件。

所以首先将所有小部件放入一个容器小部件中。然后将您的信号连接到容器小部件的setHidden() 插槽。您的信号应该发出TrueFalse,具体取决于您是要隐藏还是显示小部件。或者,您可以将信号连接到一个简单的切换插槽,如下所示:

    def toggleLeftWidget(self):
        self.leftWidget.setHidden(not self.leftWidget.isHidden())

在这种情况下,你发出什么信号并不重要。

【讨论】:

酷!非常感谢! 这也是一个很好的解决方案!我很高兴你提出了这个问题,这就是为什么仍然回答可能不是直接回答提问者的答案是件好事,至少这可能是相似的,因为像我这样 5 年前一直在搜索问题的人觉得这很有帮助.谢谢!

以上是关于如何在 PyQt 中隐藏布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyQt 在窗口中切换布局? (不关闭/打开窗口)

如何在 PyQt4 中将 QImage 插入到 NxN 网格布局中?

如何在 PyQt5 布局中更紧密地对齐两个小部件?

如何在 PyQt4 的水平布局中拉伸单个小部件?

如何在 PyQt5 中保持行和列大小与网格布局相同?

如何在5秒内在PyQt5中隐藏statusBar?