简体   繁体   English

如何删除迭代创建的 QLabels?

[英]How do I remove QLabels created iteratively?

I'm making an app where I'm iteratively creating QLabel .我正在制作一个应用程序,我在其中迭代地创建QLabel I'm trying to remove them with another button.我正在尝试使用另一个按钮删除它们。

在此处输入图像描述

I want to remove the 'history'.我想删除“历史”。 I have tried different things like label.remove() and so on, but it would add no value to add my previous attempts here (also my attempts weren't on this reproducible example).我尝试了不同的东西,比如label.remove()等等,但是在这里添加我以前的尝试没有任何价值(我的尝试也没有在这个可重现的例子上)。

Here's the code that I have:这是我的代码:

from PyQt5.QtWidgets import *
import sys

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.left = 10
        self.top = 10
        self.width = 400
        self.height = 75
        self.initUI()

        self.layout = QVBoxLayout()

        self.line = QLineEdit()
        label = QLabel('Enter a WORD:')

        run_button = QPushButton('Run')
        reset_button = QPushButton('Reset History')

        self.layout.addWidget(label)
        self.layout.addWidget(self.line)
        self.layout.addWidget(run_button)
        self.layout.addWidget(reset_button)

        widget = QWidget()
        widget.setLayout(self.layout)

        run_button.clicked.connect(self.on_click)

        self.setCentralWidget(widget)

    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)

    def on_click(self):
        response = QLabel(self.line.text())

        self.layout.addWidget(response)
        self.line.selectAll()


app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

You have to store the QLabels to later remove them from the layout and delete them, and then additionally recalculate the size of the window:您必须存储 QLabel 以便稍后从布局中删除它们并删除它们,然后另外重新计算 window 的大小:

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.left = 10
        self.top = 10
        self.width = 400
        self.height = 75
        self.initUI()

        self.layout = QVBoxLayout()

        self.line = QLineEdit()
        label = QLabel("Enter a WORD:")

        run_button = QPushButton("Run")
        reset_button = QPushButton("Reset History")

        self.layout.addWidget(label)
        self.layout.addWidget(self.line)
        self.layout.addWidget(run_button)
        self.layout.addWidget(reset_button)

        widget = QWidget()
        widget.setLayout(self.layout)

        run_button.clicked.connect(self.add_history)
        reset_button.clicked.connect(self.delete_history)

        self.setCentralWidget(widget)

        self._history_labels = []

    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)

    def add_history(self):
        history = QLabel(self.line.text())
        self.layout.addWidget(history)
        self.line.selectAll()

        self._history_labels.append(history)

    def delete_history(self):
        for history in self._history_labels:
            self.layout.removeWidget(history)
            history.deleteLater()
        self._history_labels = []
        width = self.size().width()
        self.adjustSize()
        height = self.sizeHint().height()
        QTimer.singleShot(0, lambda: self.resize(width, height))

To me, it would be easier to use one label to store all of your responses.对我来说,使用一个 label 来存储您的所有响应会更容易。 Every time you hit "Run" button, append a new line to your label.每次您点击“运行”按钮时,append 都会在您的 label 中添加一个新行。 Changed lines highlighted with # <---# <---突出显示的更改行

from PyQt5.QtWidgets import *
import sys

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.left = 10
        self.top = 10
        self.width = 400
        self.height = 75
        self.initUI()

        self.layout = QVBoxLayout()

        self.line = QLineEdit()
        label = QLabel('Enter a WORD:')

        run_button = QPushButton('Run')
        reset_button = QPushButton('Reset History')
        
        self.label = QLabel()               # <-----

        self.layout.addWidget(label)
        self.layout.addWidget(self.line)
        self.layout.addWidget(run_button)
        self.layout.addWidget(reset_button)
        self.layout.addWidget(self.label)   # <-----

        widget = QWidget()
        widget.setLayout(self.layout)

        run_button.clicked.connect(self.on_click)
        reset_button.clicked.connect(self.reset_click) # <-----

        self.setCentralWidget(widget)

    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)

    def on_click(self):
        self.label.setText(self.label.text() + '\n' + self.line.text())  # <-----

        self.line.selectAll()

    def reset_click(self):       # <-----
        self.label.setText('')   # <-----

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

        self.layout = QVBoxLayout()

        self.line = QLineEdit()
        label = QLabel('Enter a WORD:')

        run_button = QPushButton('Run')
        reset_button = QPushButton('Reset History')
        
        self.label = QLabel()               # <-----

        self.layout.addWidget(label)
        self.layout.addWidget(self.line)
        self.layout.addWidget(run_button)
        self.layout.addWidget(reset_button)
        self.layout.addWidget(self.label)   # <-----

        widget = QWidget()
        widget.setLayout(self.layout)

        run_button.clicked.connect(self.on_click)
        reset_button.clicked.connect(self.reset_click) # <-----

        self.setCentralWidget(widget)

    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)

    def on_click(self):
        self.label.setText(self.label.text() + '\n' + self.line.text()) # <-----

        self.line.selectAll()

    def reset_click(self):        # <-----
        self.label.setText('')    # <-----

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM