yan
yan

Reputation: 649

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.

Upvotes: 1

Views: 105

Answers (1)

ekhumoro
ekhumoro

Reputation: 120578

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)

Upvotes: 1

Related Questions