Pyside2建立几个按钮和内存

时间:2019-11-17 12:37:06

标签: python pyside2

我已经构建了一个包含多个QComboBox的应用程序。 更改时,每个按钮都以网格布局添加按钮(大约100个),这是被调用函数的一部分:             对于xrange(1,100)中的x:                 my_list_shots.append(str(x))

        x=2 # line 1 has the menu
        y=1 # row
        incrementLineX=1 # every 10 we go to line 2 (x+1) and reset incrementLine and y (row) to 1
        for i in xrange(1,121):
            try:
                my_shot_number=my_list_shots[i]
                my_shot_number = "%03d"%int(my_shot_number)
                self.buttons = QtWidgets.QPushButton(my_shot_number,self)
                self.buttons.setStyleSheet("background-color:brown;color:white")
                self.buttons.clicked.connect(partial(self.my_open_mov,my_shot_number))
                self.my_grid_layout.addWidget(self.buttons,x,y,1,1)
            except Exception as e:
                self.buttons = QtWidgets.QPushButton("",self)
                self.buttons.setEnabled(False)
                my_shot_number=""               
            y=y+1
            incrementLineX=incrementLineX+1
            if incrementLineX>10:
                x=x+1
                y=1
                incrementLineX = 1
            self.buttons.clicked.connect(partial(self.my_open_mov,my_shot_number))

,依此类推... 我担心内存,如果我整天打开窗口进行很多更改,那么每次创建99个按钮时,我都会创建一个吗?或不..? 如何正确构建按钮? 调用函数时是否需要销毁它们?

  

以另一种方式,我想要的是用旧按钮替换新按钮,并且如果我不打开窗口,我不想创建数千个按钮。

我只需要这样做:)

感谢您的帮助

Gui

1 个答案:

答案 0 :(得分:0)

我有解决方案。 在重建新按钮之前,我对每个创建的按钮都使用deleteLater()。

# DELETE THE OLD WIDGET IN THE LAYOUT GRID
def clearShotsWidget(self):
    while self.shotsWidgetLayout.count():
        item = self.shotsWidgetLayout.takeAt(0)
        item.widget().deleteLater()
        self.shotsWidgetLayout.removeItem(item)

另一个想法是将所有构建按钮放在列表中,并在创建新按钮之前将其删除。

非常感谢

Gui