0

Friends!

I have a function that sets up QPushButton.clicked.connects() that iterates through a list of QPushButton widgets. The issue I am having is that it iterates through correctly returning the object, name, widget during the iteration but the signal connected always connects to the last item when it finishes.

def handle_buttons(self):
    self.buttons = [self.window.kettle_ON,
                    self.window.kettle_OFF,
                    self.window.hot_liquid_ON,
                    self.window.hot_liquid_OFF,
                    self.window.chill_ON,
                    self.window.chill_OFF,
                    self.window.pump_ON,
                    self.window.pump_OFF,
                    self.window.liquid_pump_ON,
                    self.window.liquid_pump_OFF,]
    # Attempt #1
    for each_button, widget in enumerate(self.buttons):
         tag_name = str(widget.objectName())
         print(each_button, tag_name, type(widget))
         widget.clicked.connect(lambda checked: self.BUTTON_TOGGLE(str(tag_name)))

    # Attempt #2
    for each in range(len(self.buttons)):
        self.buttons[each].clicked.connect(lambda checked: self.BUTTON_TOGGLE(str(self.buttons[each].objectName())))

This is my output; I clicked all the buttons and my output for Attempt #1 and #2 both have the same output:

 0 kettle_ON <class 'PyQt5.QtWidgets.QPushButton'>
 1 kettle_OFF <class 'PyQt5.QtWidgets.QPushButton'>
 2 hot_liquid_ON <class 'PyQt5.QtWidgets.QPushButton'>
 3 hot_liquid_OFF <class 'PyQt5.QtWidgets.QPushButton'>
 4 chill_ON <class 'PyQt5.QtWidgets.QPushButton'>
 5 chill_OFF <class 'PyQt5.QtWidgets.QPushButton'>
 6 pump_ON <class 'PyQt5.QtWidgets.QPushButton'>
 7 pump_OFF <class 'PyQt5.QtWidgets.QPushButton'>
 8 liquid_pump_ON <class 'PyQt5.QtWidgets.QPushButton'>
 9 liquid_pump_OFF <class 'PyQt5.QtWidgets.QPushButton'>

 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF
 liquid_pump_OFF

NOW, if I do it standalone like this...it works.

 self.buttons[0].clicked.connect(lambda checked: self.BUTTON_TOGGLE(str(self.buttons[0].objectName())))
 self.buttons[1].clicked.connect(lambda checked: self.BUTTON_TOGGLE(str(self.buttons[0].objectName())))
 self.buttons[2].clicked.connect(lambda checked: self.BUTTON_TOGGLE(str(self.buttons[0].objectName())))
 .
 .
 .

Any insight would be greatly appreciated!

Kris Kizlyk
  • 151
  • 8

0 Answers0