如何从 QGridLayout modify/clear/delete QWidget ? - Python, PyQt

How to modify/clear/delete a QWidget from a QGridLayout ? - Python, PyQt

我希望有一个 QGridLayout 包含一些可以动态更改的信息。然而,实际上,它只会将不同的信息叠加在前一个信息之上,而不是替换它。令人惊讶的是,我找不到从网格中删除或清理此类小部件的方法。那又怎样,不能动态改吗?...

这是一个代码示例:

import sys

from PyQt5.QtWidgets import (
    QApplication,
    QGridLayout,
    QPushButton,
    QWidget,
    QLabel
)

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QGridLayout Example")
        # Create a QGridLayout instance
        self.buttonA = QPushButton("A")
        self.buttonB = QPushButton("B")
        self.layout = QGridLayout()
        # Add widgets to the layout
        self.layout.addWidget(self.buttonA, 0, 1)
        self.layout.addWidget(self.buttonB, 0, 2)
        self.layout.addWidget(QPushButton("C"), 1, 0)
        self.layout.addWidget(QPushButton("D"), 1, 1)
        self.layout.addWidget(QPushButton("E"), 1, 2)
        self.layout.addWidget(QPushButton("F"), 2, 0)
        self.layout.addWidget(QPushButton("G"), 2, 1)
        self.layout.addWidget(QPushButton("H"), 2, 2)
        # Set the layout on the application's window
        self.setLayout(self.layout)

        
        self.buttonA.clicked.connect(self.change_label)
        self.buttonB.clicked.connect(self.change_label2)
        
    def change_label(self):
        self.label = QLabel("Hello")
    self.layout.addWidget(self.label, 0, 0)
        
    def change_label2(self):
        self.label = QLabel("Bonjour")
    self.layout.addWidget(self.label, 0, 0)
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

当点击按钮 A 时,我希望在框 (0,0) 中显示“你好”。然后,如果单击按钮 B,我想将文本“Hello”替换为“Bonjour”。但是我只能将一个文本放在另一个文本之上,这显然很难阅读。

有人可以帮助我吗?

只需使用此代码:

import sys

from PyQt5.QtWidgets import (
    QApplication,
    QGridLayout,
    QPushButton,
    QWidget,
    QLabel
)

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QGridLayout Example")
        # Create a QGridLayout instance
        self.label = QLabel("Show text here")

        self.buttonA = QPushButton("A")
        self.buttonB = QPushButton("B")
        self.layout = QGridLayout()
        # Add widgets to the layout
        self.layout.addWidget(self.label, 0, 0)
        self.layout.addWidget(self.buttonA, 0, 1)
        self.layout.addWidget(self.buttonB, 0, 2)
        self.layout.addWidget(QPushButton("C"), 1, 0)
        self.layout.addWidget(QPushButton("D"), 1, 1)
        self.layout.addWidget(QPushButton("E"), 1, 2)
        self.layout.addWidget(QPushButton("F"), 2, 0)
        self.layout.addWidget(QPushButton("G"), 2, 1)
        self.layout.addWidget(QPushButton("H"), 2, 2)
        # Set the layout on the application's window
        self.setLayout(self.layout)

        
        self.buttonA.clicked.connect(self.change_label)
        self.buttonB.clicked.connect(self.change_label2)
        
    def change_label(self):
        self.label.setText("Hello")
        
    def change_label2(self):
        self.label.setText("Bonjour")
        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())