如何在PyQt中隐藏布局?

spa*_*row 4 python pyqt4

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

ekh*_*oro 9

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

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

    def toggleLeftWidget(self):
        self.leftWidget.setHidden(not self.leftWidget.isHidden())
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您发出的信号无关紧要。


MaV*_*Art 9

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

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()
Run Code Online (Sandbox Code Playgroud)

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