1

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!

1 Answer 1

1

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]) 
Sign up to request clarification or add additional context in comments.

2 Comments

Tip me by upvoting :o)
Sorry. I can't upvote you now. I do not have enough reputation. When i have enough i will upvote you ;)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.