[英]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.