Button binding in Kivy Python
Question: I am wondering how to get my code to work. I have a class wich creates a popup
window with buttons. Each button should be bound to subclass. But it doesnt
work. What´s wrong with my code?

    
    
    class chooser:
    def __init__(self):
        None
    def show(self,title,options=["NOTHING"],size=(.5,.5)):
        self.bts = {}
        self.response = False
        self.content = FloatLayout()
        self.content.pos_hint = {"y":0,"x":0}
        # create buttons
        pos_cntr = 0
        for opt in options:
            self.bts[pos_cntr] = Button(text=opt)
            self.bts[pos_cntr].size_hint = 1,float(1)/float(len(options))
            self.bts[pos_cntr].pos_hint = {"x":0,"y":pos_cntr}
            self.bts[pos_cntr].bind(on_press=self.canceldia)
            self.content.add_widget(self.bts[pos_cntr])
            print "bound"
            pos_cntr += float(1)/float(len(options))
        self.pop = Popup(title=title,content=self.content,auto_dismiss=False)
        self.pop.size_hint = size
        self.pop.open()
    def canceldia(self,instance):
        print "closing"
        self.response = instance.text
        self.pop.dismiss()
    def getresponse(self):
        return self.response
    

I have imported all needed modules.

I execute it so:

    
    
    c = chooser()
    c.show("hello","world",["welcome","close","nothing","example"])
    

I have create a root widget. The popup works fine and all is created nice but
the buttons are not bound. Please help me!


Answer: In your loop, you always reference `self.bts[pos_cntr]`, so you override it in
every iteration. How about this?

    
    
    for idx, opt in enumerate(options):
        self.bts[idx] = Button(text=opt)
        self.bts[idx].size_hint = 1,float(1)/float(len(options))
        self.bts[idx].pos_hint = {"x":0,"y":pos_cntr}
        self.bts[idx].bind(on_press=self.canceldia)
        self.content.add_widget(self.bts[idx])
    

