Как создать кнопки Dynami c в Pyqt5 - PullRequest
0 голосов
/ 16 февраля 2020

Как я могу обрабатывать каждую кнопку отдельно? при нажатии кнопки «Назначить» будет назначено имя. Я пытался поместить каждую кнопку и имя в список, но как я могу отслеживать, были ли нажаты кнопки?

код


 ## repeated for every worker
    for i in range(2):

        self.Vl_name_location = QtWidgets.QVBoxLayout()
        self.Vl_name_location.setObjectName("Vl_name_location")
        self.worker_name = QtWidgets.QLabel(self.groupBox)
        self.worker_name.setAlignment(QtCore.Qt.AlignCenter)

        ## from db
        self.worker_name.setText("worker_name")
        self.worker_name.setObjectName("worker_name")                       
        self.Vl_name_location.addWidget(self.worker_name)
        self.worker_location = QtWidgets.QLabel(self.groupBox)
        self.worker_location.setAlignment(QtCore.Qt.AlignCenter)
        self.worker_location.setObjectName("worker_location")
        # from db
        self.worker_location.setText("Eng,Zone B")
        self.Vl_name_location.addWidget(self.worker_location)
        self.Hl_worker.addLayout(self.Vl_name_location)
        #####
        ### assign button to connect the name of the worker to the image       on the db
        #####

        self.assign_button = QtWidgets.QPushButton(self.groupBox)
        self.assign_button.setMinimumSize(QtCore.QSize(50, 25))
          self.assign_button.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.assign_button.setStyleSheet("")
        self.assign_button.setObjectName("assign_button")
        self.assign_button.setText( "Assign" )
        btns.append(self.assign_button)  
        self.Hl_worker.addWidget(self.assign_button)

предварительный просмотр GUI

1 Ответ

0 голосов
/ 16 февраля 2020

Я не уверен, правильно ли я понял ваш вопрос, но я предполагаю, что при нажатии одной из двух кнопок вы хотите задать текст соответствующей метки worker_name. Если это так, то одним из способов достижения этого является добавление кнопок и меток в качестве ключей и значений в словарь и использование self.dct[self.sender()] для извлечения метки при нажатии кнопки, например,

class MyWidget(QtWidgets.QWidget):
    def __init__(self, ...):
        ...

        # dictionary for storing button-label pairs
        self.label_dct = {}
        self.add_workers()

    def add_workers(self):
        for i in range(10):
            worker_label = QtWidgets.QLabel('worker name')
            assign_button = QtWidgets.QPushButton('Assign')
            self.label_dct[assign_button] = worker_label

            # rest of setup

            assign_button.clicked.connect(self.set_label)

    @pyqtSlot()
    def set_label(self):
        button = self.sender()
        label = self.label_dct[button]
        label.setText("John Doe")

...