PySide : How to get the clicked QPushButton object in the QPushButton clicked slot?

qpushbutton disable python
clicked.connect pyqt5 not working
qpushbutton size
qt connect(button to function)
qt designer connect button to function
pyside signals and slots
pyqt5 multiple buttons

I am new to PySide. I want to get the QPushButton obj (such as use it to get its text) in its clicked slot.

button = QtGui.QPushButton("start go")

def buttonClick(self):
    ... # How can I get the button  object?
    # print button.text()  how to get the text : 'start go' ?


Here is what I did to solve the problem:

button = QtGui.QPushButton("start go")
button.clicked.connect(lambda: self.buttonClick(button))

def buttonClick(self, button):
    print button.text()

Qt for Python Tutorial ClickableButton, 1 # Create a button 2 button = QPushButton("Click me"). Before we show the button, You can find more information about both approaches in  So this method is for creation of our QPushButton in Pyside2, also you can see that we have connected our clicked signal to the quiteApp slot that we are going to make it later. Python def setButton(self): btn1 = QPushButton("Quit", self) btn1.move(50,100) btn1.clicked.connect(self.quiteApp)

You can just use self.sender() to determine the object that initiated the signal.

In your code something along the lines of this should work.

button = QtGui.QPushButton("start go")

def buttonClick(self):
    print self.sender().text()

PyQt - QPushButton Widget, Buttons b1 and b4 are connected to whichbtn() slot method. Since the function is intended to retrieve caption of the clicked button, the button object should be  After reading about finite state machines I found the the QState/QStateMachine API in QT. But now I can't find out how to use it to run different code based on which state I'm currently in.

Usually, most widgets will be created in the setup code for the main window. It is a good idea to always add these widget as attributes of the main window so that they can be accessed easily later on:

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent=None)
        super(MainWindow, self).__init__(parent)
        self.button = QtGui.QPushButton("start go")

    def buttonClick(self):

If you have lots of buttons that all use the same handler, you could add the buttons to a QButtonGroup, and connect the handler to its buttonClicked signal. This signal can send either the clicked button, or an identifier that you specify yourself.

There is also the possibility of using self.sender() to get a reference to the object that sent the signal. However, this is sometimes considered to be bad practice, because it undermines the main reason for using signals in the first place (see the warnings in the docs for sender for more on this).

QPushButton, Push (click) a button to command the computer to perform some action, or to answer a question. Typical buttons are OK, Apply, Cancel, Close, Yes, No and Help. A  But, PyQt5 changed how the whole 'connect button to a slot' works, and I still can't figure it out how to do it. I did a quick gui in QtDesigner, and I have a QPushButton and a label. When I click the button, I want the text on the label to change. in C++ in QtDesigner, It's easy to connect the two. But I have to write it all in python.

I actually wanted to comment on a comment in answer #1 but don't have enough reputation to do so yet :). The comment is "Can be tricky to use lambda like this when connecting lots of buttons in a loop, though." And that's exactly what I needed to do when I found this page.

Doing this in a loop doesn't work:

for button in button_list :
    button.clicked().connect( lambda: self.buttonClick( button )

Your callback will always get called with the last button in button_list (for why see information on this page I also just found -

Do this instead, it works:

for button in button_list :
    button.clicked().connect( lambda b=button: self.buttonClick( b ))

PySide/PyQt Tutorial: Using Built-In Signals and Slots, We look at what signals and slots are in PySide and PyQt. What they can be For example, when a QPushButton is clicked, it emits its clicked signal. Every Qt application must have one and only one QApplication object;. Buttons b1 and b4 are connected to whichbtn () slot method. Since the function is intended to retrieve caption of the clicked button, the button object should be passed as an argument. This is achieved by the use of lambda function.

PySide: Connecting Multiple Widgets to the Same Slot, If you don't have PySide yet, go out and get it. If you want to try this QtGui import QPushButton, QVBoxLayout button3.clicked.connect(self. The text of QPushButton can be set upon creation or using setText(). To get the current text of the button use text(). Icon. The icon of QPushButton can also be set upon creation. After creation the icon can be changed using setIcon() To get the current icon of the button use icon() Set Position and Size

Attaching callbacks to events · Tutorial PySide/PyQt4, Qt (and therefore PySide/PyQt) has built-in signals and slots to control the most Slots receive inputs from signals, and are able to perform common actions def onSaveButtonClicked(self): filename = self. UI file into the corresponding Qt Python object :param file_name: UI file path QPushButton, 'exportButton') self. PySide2.QtWidgets.QPushButton.initStyleOption (option) ¶ Parameters. option – QStyleOptionButton. Initialize option with the values from this QPushButton. This method is useful for subclasses when they need a QStyleOptionButton, but don’t want to fill in all the information themselves.

PySide GUI Application Development, We push (click on) the button to command the computer to perform some action or It can also have an optional icon associated with it. this signal, and it is usually called a slot in Qt. We will learn more about signals and slots in the later chapters. They are as follows: QPushButton(parent=None) QPushButton(text,  def testButtonClickClose(self): button = QPushButton() button.connect(button, SIGNAL('clicked()'), SLOT('close()')) self.assert_(button.isVisible()) self.assert_(not button.isVisible())

  • +1. This is probably the best way to avoid using sender(). Can be tricky to use lambda like this when connecting lots of buttons in a loop, though.
  • what the lambda does?
  • In Python, lambda creates an anonymous function, more info here
  • I just test it, But it issues an error.
  • @tao4yu. The example code should be: print self.sender().text()
  • Thanks @ekhumoro bad copy/pasting on my part.
  • There may be a catch here, however... Being a local variable, the widget's c++ object may have gotten deleted by the time the callback is called. Running into this now.