如何在pyq中删除QFrame

2024-10-01 04:53:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个类似于ubuntu软件中心的GUI。我用的是pyqt。我在GUI中创建了三个QFrame对象。每个QFrame对象都有不同的用途,一个用于分类,一个用于顶级软件,一个用于推荐软件。这三个框架显示在主GUI屏幕上。在搜索关键字之后,我只想在屏幕上显示一个包含结果的帧。因此,当我点击一个按钮时,我需要删除这三个帧。我没有找到任何关于删除框架的信息。在

我在网上找到的只是从布局中删除小部件。我已经知道并在我的一个框架中实现了这一点。在这个框架中,当我点击一个按钮时,我会从框架中移除一些小部件,等等。我的代码如下: r self.topRatedAppsFrame=QtGui.Q框架(自我中心Widget) ... 在

self.horFortopRatedApps = QtGui.QWidget(self.topRatedAppsFrame)
...

self.topRatedAppsList = QtGui.QGridLayout(self.horFortopRatedApps)
...


self.app1 = QtGui.QPushButton(self.horFortopRatedApps)
self.topRatedAppsList.addWidget(self.app1,0,0)


#########this deletes only widget app1 from topRatedAppsList#########
#########but frame still exists and appears in the screen.i #########
######### want to destroy or delete frame topRatedAppsFrame #########
self.topRatedAppsList.removeWidget(self.app1)
self.app1.deleteLater()
self.app1 = None
####################################################################

提示:我想实现的是在Ubuntu软件中心实现的。Ubuntu软件中心有很多框架。但是当我们搜索某个东西时,一切都消失了,只显示搜索结果。我想做同样的事。我下载了Ubuntu软件中心并检查了源代码代码。因为它太复杂了,而且使用了gtk,这个源代码对我没有帮助。我该怎么做?如有任何指导或想法,我们将不胜感激。在


Tags: 对象self框架软件屏幕ubuntugui中心
2条回答

删除或删除其他帧可能是错误的方法。在

只需根据需要隐藏/显示帧会更有效。有几种方法可以实现这一点,但是QStackedLayout听起来最适合你的蛹。您需要做的就是将每组框架作为一个单独的层/页添加到堆栈中,然后使用setCurrentIndex将所需的项放到顶部。堆叠布局就像一个选项卡小部件,但是没有选项卡栏和外部框架。在

编辑

下面是一个简单的工作演示,演示如何使用堆叠布局:

from PyQt4 import QtCore, QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        def make_frame(text, parent):
            frame = QtGui.QFrame(parent)
            frame.setFrameStyle(QtGui.QFrame.StyledPanel)
            layout = QtGui.QHBoxLayout(frame)
            label = QtGui.QLabel(text, frame)
            label.setAlignment(QtCore.Qt.AlignCenter)
            layout.addWidget(label)
            return frame
        self.splitter = QtGui.QSplitter(self)
        for text in 'ONE TWO THREE'.split():
            self.splitter.addWidget(make_frame(text, self.splitter))
        self.stack = QtGui.QStackedLayout()
        self.stack.addWidget(self.splitter)
        self.stack.addWidget(make_frame('FOUR', self))
        self.button = QtGui.QPushButton('Switch', self)
        self.button.clicked.connect(
            lambda: self.stack.setCurrentIndex(
                int(self.stack.currentIndex() == 0)))
        layout = QtGui.QVBoxLayout(self)
        layout.addLayout(self.stack)
        layout.addWidget(self.button)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 800, 500)
    window.show()
    sys.exit(app.exec_())

QFrame是QWidget类的子类。删除QWidget已经在问题中解释过了。因此,可以以类似的方式删除QFrame。在

使用QStackLayout并不能解决这个问题。因为,窗口中必须同时有多个活动帧。然而,使用QStackLayout,一次只能激活一个QFrame(QWidget),这不适合这种情况。在

相关问题 更多 >