如何从 QtWidgets 中删除 QPushButtons?

How to delete QPushButtons from inside QtWidgets?

在 PyQt5 中,我正在动态添加 QPushButtons,有没有办法根据一些标签值删除它们。 我正在按以下方式动态添加按钮:

for i in range(0, len(self.all_saved)):
        

        self.button = QPushButton("X", self)
        self.button.setStyleSheet("background-color: red")
        self.button.resize(20, 20)
        self.button.clicked.connect(lambda ch, i=i: self.future(i)) 

        self.button.move(self.all_rect[i][0], self.all_rect[i][1])
        self.button.show()

一旦用户点击按钮 'X' 它应该自行删除,这基本上就是我在这里尝试做的所有事情,至于为什么我不能使用 QVBoxLayout 是因为所有按钮都将放置在不同的 x 上, y坐标请让我知道,如果你有什么建议?

我知道我们可以使用 QVBoxLayout 或 QHBoxLayout 轻松做到这一点,但是有没有办法直接在 QtWidgets.QWidget

上做到这一点

您只需调用 deleteLater() 方法即可删除对象并通知(使用销毁信号)小部件已删除的布局。注意:不要使用 self.button,因为它没用。

for i in range(0, len(self.all_saved)):
    button = QPushButton("X", self)
    button.setStyleSheet("background-color: red")
    button.resize(20, 20)
    button.clicked.connect(button.deleteLater) 
    button.move(self.all_rect[i][0], self.all_rect[i][1])
    button.show()

如果你想根据某些条件删除某些按钮,那么你必须使用sender()方法获取按钮并调用deleteLater:

button.clicked.connect(self.handle_clicked)
def handle_clicked(self):
    button = self.sender()
    if some_condition:
        button.deleteLater()