Как мне изменить название одинаковых кнопок?
У меня есть кнопка "Добавить", при нажатии на которую создается другая кнопка. Таких кнопок может быть n количество.
Проблема заключается в том, что при изменении названия именно нажатой кнопки, изменяется только последняя созданная кнопка.
Суть заключается в том, чтобы при нажатии на одну из созданных кнопок, изменялся текст только у той кнопки, что была нажата.
group.py:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(893, 539)
self.scrollArea = QtWidgets.QScrollArea(Dialog)
self.scrollArea.setGeometry(QtCore.QRect(10, 10, 551, 521))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 549, 519))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout.setObjectName("verticalLayout")
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(610, 30, 236, 31))
self.pushButton.setMinimumSize(QtCore.QSize(0, 0))
self.pushButton.setStyleSheet("QPushButton:hover {\n"
" background-color: rgb(218, 218, 218);\n"
" }\n"
"\n"
"QPushButton {\n"
" border-width: 2px;\n"
" border-style: outset;\n"
" border-color: black;\n"
" }\n"
"\n"
"QPushButton:pressed {\n"
" \n"
" \n"
" \n"
" background-color: rgb(195, 195, 195);\n"
" }")
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "добавить"))
main_group.py:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from group import Ui_Dialog
count = [1]
class main_window(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.create)
def create(self):
self.button = QtWidgets.QPushButton('Button {}'.format(count[-1]),self)
self.ui.verticalLayout.addWidget(self.button)
self.button.clicked.connect(self.change)
count.append(count[-1] + 1)
def change(self):
print(self.button.setText("измененно"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mywin = main_window()
mywin.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Это делается так
...
# vvvvvvvvvv vvv
button.clicked.connect(lambda ch, btn=button: self.change(btn))
...
def change(self, btn):
print(btn.setText("измененно"))
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#from group import Ui_Dialog
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(893, 539)
self.scrollArea = QtWidgets.QScrollArea(Dialog)
self.scrollArea.setGeometry(QtCore.QRect(10, 10, 551, 521))
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 549, 519))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout.setObjectName("verticalLayout")
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(610, 30, 236, 31))
self.pushButton.setMinimumSize(QtCore.QSize(0, 0))
self.pushButton.setStyleSheet("QPushButton:hover {\n"
" background-color: rgb(218, 218, 218);\n"
" }\n"
"\n"
"QPushButton {\n"
" border-width: 2px;\n"
" border-style: outset;\n"
" border-color: black;\n"
" }\n"
"\n"
"QPushButton:pressed {\n"
" \n"
" \n"
" \n"
" background-color: rgb(195, 195, 195);\n"
" }")
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton.setText(_translate("Dialog", "добавить"))
#count = [1]
class MainWindow(QtWidgets.QWidget, Ui_Dialog):
count = [1]
def __init__(self, parent=None):
super().__init__(parent)
# self.ui = Ui_Dialog()
self.setupUi(self)
self.pushButton.clicked.connect(self.create)
def create(self):
button = QtWidgets.QPushButton('Button {}'.format(self.count[-1]),self)
self.verticalLayout.addWidget(button)
button.clicked.connect(lambda ch, btn=button: self.change(btn))
self.count.append(self.count[-1] + 1)
def change(self, btn):
print(btn.setText("измененно"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mywin = MainWindow()
mywin.show()
sys.exit(app.exec_())
