Search code examples
pythonpyqtqpushbuttonqlineedit

How to choose line-edit according to which button was clicked


I have two buttons (Eg. A andB) which do the same things (based on user selection). So when you select something, then click the button, the selection's name will be input into the line-edit for the button. For example, if I click on buttonA, the input will be to lineEditA.

Currently I have created a signal function as follows:

def _connections_setup(self):
    self.btnA.clicked.connect(self.get_sel_nameA)
    self.btnB.clicked.connect(self.get_sel_nameB)

def get_sel_nameA(self):
    sel_name = get_name_from_sel()
    self.line_editA.setText(sel_name)

def get_sel_nameB(self):
    sel_name = get_name_from_sel()
    self.line_editA.setText(sel_name)

"""
def get_sel_name(self):        
    # Returns me a blank
    button = self.sender()
    print button.objectName()

    # My objective here would be, if btnA is clicked, the sel_name will be inputted into lineEditA. Likewise for btnB
"""

Instead of creating two similar functions, how can I determine which button was clicked and have the selection's name to be input correctly into the line-edit?

I tried using self.sender() (see get_sel_name()) but it does not seems to return me the button name.


Solution

  • The sender() function only works in slots directly connected to signals. So your code needs to look something like this:

    def _connections_setup(self):
        self.btnA.clicked.connect(self.get_sel_name)
        self.btnB.clicked.connect(self.get_sel_name)
    
    def get_sel_name(self):        
        button = self.sender()
        name = button.objectName()
        if button is self.btnA:
            self.line_editA.setText(name)
        elif button is self.btnB:
            self.line_editB.setText(name)