The QPushButton.clicked
signal emits an argument that indicates the state of the button. When you connect to your lambda slot, the optional argument you assign idx
to is being overwritten by the state of the button.
Instead, make your connection as
button.clicked.connect(lambda state, x=idx: self.button_pushed(x))
This way the button state is ignored and the correct value is passed to your method.