Search code examples
python-3.xpyqtpyqt4pyqt5

Emit every signals for each n element in list of QpushButton object


I have list of QPushButton.i want to be able to make all button in list to emit signals in much more simpler way.

here's my code:

 def btn_click(self):
self.menu_list[0].clicked.connect(lambda: self.add_cart(self.menu_list[0]))
self.menu_list[1].clicked.connect(lambda: self.add_cart(self.menu_list[1]))
self.menu_list[2].clicked.connect(lambda: self.add_cart(self.menu_list[2]))
self.menu_list[3].clicked.connect(lambda: self.add_cart(self.menu_list[3]))
self.menu_list[4].clicked.connect(lambda: self.add_cart(self.menu_list[4]))
self.menu_list[5].clicked.connect(lambda: self.add_cart(self.menu_list[5]))
def add_cart(self):
print(b.text())

Solution

  • You can do it in loop:

    main

    def btn_click(self):
        for button in menu_list:
            button.clicked.connect(self.add_cart)
    
    def add_cart(self):
        b = self.sender()
        print(b.text())
    

    alternative

    def btn_click(self):
        for button in self.menu_list:
            button.clicked.connect(lambda btn=button: self.add_cart(btn))
    

    Note that you need btn=button for making closure, otherwise all buttons woud refer to the last one.

    ps:For more explanation on main way read @ekhumoro comment below