Kivy find out which Button called the Function

Question:

I have a List which I go through and generate a Button for each element in the List. Now when I press the Button I would like to know what Text is inside the Button. Sadly I was not able to figure out how to do this.

Here is the entire Loop however the Last 3 rows are the important ones.

Listezumsortieren = [*self.root.ids.Kommentar.text]
                x = 0
                stelle = 0
                for i in Listezumsortieren: 
                    if x == 17:
                        Listezumsortieren.insert(stelle," n")
                        x = 0 
                    x = x+1 
                    stelle = stelle + 1 
                    if stelle > 65: 
                        return  

                Zitatselbst = ''.join(Listezumsortieren)
                    
                btn = Button(text =  'n"' + Zitatselbst + '"' + "n     ~" + self.root.ids.field.text + "n", size_hint = (0.8 , None))
                btn.bind(on_press=lambda x:self.kek())
                self.root.ids.Zitate.add_widget(btn)

Thanks for helping

To specify because of the first answer:
so for example if I have a list of [1,2,3] and have three buttons with the text: (1,2,3) no matter which button I click the Button will return "3" and not the actual text of the Button, Thanks for trying to help

This is because "Self" is not referring to the Button but rather to the class the Function is in (MainApp) so to be more precise I need to know how to get to the Button

Asked By: Deimos

||

Answers:

To get the text inside a button when it is pressed, you can pass the text as an argument to the callback function of the on_press event. Here’s an example:

btn = Button(text='Button Text', size_hint=(0.8, None))
btn.bind(on_press=lambda x: self.on_button_press(btn.text))
self.root.ids.Zitate.add_widget(btn)

In this example, the text property of the button is passed as an argument to the on_button_press function when the button is pressed.

You can then define the on_button_press function to handle the button press and retrieve the text. Here’s an example:

def on_button_press(self, text):
    print(f"The button text is {text}")
    # do something with the button text

In this example, the text argument passed from the button press event is used to print out the button text. You can replace the print statement with whatever functionality you want to perform with the button text.

UPD:

Just to clarify, when you use lambda x: self.print_button_text(x), you’re creating a new anonymous function that takes one argument x, and calls the print_button_text method on self (which refers to the MainApp instance) with x as the argument. When you bind this anonymous function to the button’s on_press event, the Button instance is passed as the argument x. So, when you call self.print_button_text(x) inside the anonymous function, you’re passing the Button instance as the argument to the print_button_text method. By using x.text inside the print_button_text method, you’re accessing the text attribute of the Button instance, which contains the text that was displayed on the button.

Answered By: angwrk
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.