如何删除网格布局小部件内的所有小部件并以相同顺序重新创建所有小部件

问题描述 投票:1回答:1

这是我上一个问题的继续。.“如何从左上角开始将小部件添加到网格布局中”感谢X.Jacobs >>解决了问题。现在,我想删除所有这些小部件,并以相同的顺序重新创建相同的小部件,例如刷新小部件库。谢谢

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9sYm5WNi5wbmcifQ==” alt =“在此处输入图像描述”>

确定,这是我的用户界面。当我单击createPose按钮时,它将调用3 Def。。

1

。在特定文件夹中创建一个txt文件

2

。清除网格布局中的所有小部件...

3

。最后根据tat特定文件夹中文件和文件名的数量重新创建我的所有小部件,例如添加小部件并刷新库..,但顺序与之前相同。.]]
        self.connect(self.ui.CreatePose_pushButton, QtCore.SIGNAL("clicked()"), self.createPose)

    def createPose(self):
                # To get Posename from UI
        self.__current_Posename = self.getPoseName()

        Path = 'D:\\PoseLibrary\\'

                # To Grab All files in tat Path
        Poses = self.findAllFiles(Path, '.xml')

        self.__NameSpace = self.ui.NameSpace_comboBox.currentText()

                #To find HighestTrailingNumber to Increment the file name
        if self.__current_Posename == "":
            newSuffix = self.findHighestTrailingNumber(Poses, self.__Default_Posename) + 1
            self.PoseName = self.__Default_Posename + str(newSuffix)
        else:
            self.PoseName = self.__current_Posename


        # Creating XML and Icon files
        open(Path + self.PoseName  + '.xml','w').close()

        icon = self.createIcon(self.PoseName, Path)
        # open(Path + self.PoseName  + '.png','w').close()


        self.refreshPoseLibrary(Path)
        self.ui.PoseName_lineEdit.clear()



    def refreshPoseLibrary(self, Path ):
        # First Clear all my buttons in gridlayout
                self.deleteAll()

                # get all file fromm the path dir

        Files = self.getfiles_by_Date(Path)
        Poses = self.findAllFiles(Files, '.xml')

                # Create Btn 
        for Pose in Poses:
            icon = Path + Pose + '.png'
            self.icon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.button = QtGui.QPushButton('')
            self.button.setObjectName(Pose)
            self.buttonGroup.addButton(self.button)
            self.button.setIcon(self.icon)
            self.button.setIconSize(QtCore.QSize(128, 128))
            self.button.setMinimumSize(QtCore.QSize(128, 128))
            self.button.setMaximumSize(QtCore.QSize(128, 128))
            self.ui.gridLayout.addWidget(self.button)
            self.button.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
            self.connect(self.button, QtCore.SIGNAL('customContextMenuRequested(const QPoint&)'), self.popup)

    def deleteAll(self):
        while self.ui.gridLayout.count():
            item = self.ui.gridLayout.takeAt(0)
            widget = item.widget()
            widget.deleteLater()


        def getfiles_by_Date(self, dirpath):
        Files = [s for s in os.listdir(dirpath)
             if os.path.isfile(os.path.join(dirpath, s))]
        Files.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
        return Files

现在我又添加了一个功能,可以按创建日期对文件夹文件进行排序..现在我的网格布局以正确的顺序排列我的按钮..但是按钮的位置在跳跃..就像它们之间的缝隙..我已经上传了我的屏幕截图也

这是我在此之前的问题的继续。.感谢X.Jacobs解决tat问题。“如何从左上角开始将小部件添加到gridlayout”。现在我想删除所有这些小部件...] >

从布局中删除所有小部件看起来像这样:

while layout.count():
    item = layout.takeAt(0)
    widget = item.widget()
    # if widget has some id attributes you need to
    # save in a list to maintain order, you can do that here
    # i.e.:   aList.append(widget.someId)
    widget.deleteLater()
python python-3.x pyqt pyqt5
1个回答
3
投票

从布局中删除所有小部件看起来像这样:

© www.soinside.com 2019 - 2024. All rights reserved.