我正在尝试基于条目(QLineEdit)创建按钮(QPushButtons)。我的想法是,我希望用户能够创建任意数量的按钮,只需在输入框中添加新文本,然后按“添加标签”(见下图)
虽然我能够做到这一点,但我现在无法检索每个按钮的标签值,因为我使用的过程会删除所有以前的值(我只能检索最后输入的值)。我希望在单击每个按钮时能够打印每个特定的标签值
我的代码如下:
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
import sys
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setGeometry(100, 100, 1500, 1500)
self.setWindowTitle("My Program")
self.labelButtons = [] # List of all the buttons displaying labels
self.eraseButtons = [] # List of all the buttons displaying "X"
self.Yposition = 50
self.initUI()
def initUI(self):
self.labelEntry = QLineEdit(self)
self.labelEntry.move(50, self.Yposition)
self.labelEntry.resize(300, 40)
self.addLabelButton = QPushButton(self)
self.addLabelButton.setText("Add Label")
self.addLabelButton.move(400, self.Yposition)
self.addLabelButton.resize(300, 40)
self.addLabelButton.clicked.connect(self.addNewLabel)
def addNewLabel(self):
self.Yposition += 50
self.newLabelName = self.labelEntry.text()
self.labelButtons.append(self.createButtonLabel(self.newLabelName))
self.eraseButtons.append(self.eraseButtonLabel())
self.updatelabels()
def createButtonLabel(self, labelname):
self.button = QPushButton(self)
self.button.setText(str(labelname))
self.button.resize(300, 40)
self.button.move(50, self.Yposition)
self.button.clicked.connect(self.printbutton)
return self.button
def eraseButtonLabel(self):
self.buttonErase = QPushButton(self)
self.buttonErase.setText("X")
self.buttonErase.resize(40, 40)
self.buttonErase.move(360, self.Yposition)
self.buttonErase.clicked.connect(self.printbutton)
return self.buttonErase
def updatelabels(self):
for button in self.labelButtons:
button.show()
for button in self.eraseButtons:
button.show()
def printbutton(self):
print(self.button.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())
<!-- end snippet -->
使用谷歌
pyqt clicked event
我发现你必须使用ZetCode:Events and signals in PyQt5
编辑:
至于
erease
按钮-您应该从createButtonLabel
获取按钮并将其发送到eraseButtonLabel
您可以使用
lambda
将函数与参数赋值函数应该得到这个参数
或者您可以将
button
分配给buttonErase
中的自有变量并在函数中使用它
同时使用两种方法但只需要一种方法的完整代码
编辑:
另一种方法是创建自己的小部件,它有两个按钮
labelbutton
和erasebutton
,然后erasebutton
只能直接访问自己的labelbutton
顺便说一句:出于同样的原因,我会保持按钮成对
而不是单独的列表
我创建自己的小部件的示例
相关问题 更多 >
编程相关推荐