On Sat, 26 Feb 2005 19:48:25 +0000
Adam Cripps <[EMAIL PROTECTED]> wrote:
> On Fri, 25 Feb 2005 12:21:18 +0100, Michael Lange
> <snip>
> >
> > You see, in my example above I called the list "buttonlist" instead of
> > "button"; maybe this naming
> > helps avoid confusion .
> >
> > Best regards
> >
> > Michael
>
> Many thanks for the help here.
>
> I got all my buttons displayed and stored in the list with:
>
> for i in range (1, 11):
> submittext = ">>> "
> self.s = Button(text=submittext, command =
> self.showButton)
> self.s.grid(column=4, row=i+4)
> submitlist.append(self.s)
>
Hi Adam,
note that there's no use in making the button an attribute of its parent class
with
self.s = Button(text=submittext, command = self.showButton)
because self.s gets overridden on every iteration in the for-loop; it's not a
bug, but
might be a source of confusion, when you try to access self.s later in your
code; you don't
need the reference anyway, because you keep the references to all buttons in
the list.
>
> - however, when I click the button, I want self.showButton to know
> which one of them was pressed. I've seen in other gui programming the
> idea of an id or identifier - I can't see that here. Ideally, I would
> like to know the value of i in self.showButtons - but when I use
> self.showButtons(i) showButtons gets called straight at run time.
>
> Any ideas?
You have two options here:
1. use a lambda expression as button command, lambda allows you to pass an
argument to the callback:
s = Button(text=submittext, command = lambda index=i:
self.showButton(index))
2. if you don't like lambdas, you can use the button's bind() method instead of
the command option:
s = Button(text=submittext)
s.bind('<ButtonRelease-1>', self.showButton)
s.bind('<KeyRelease-space>', self.showButton)
bind() passes an event to the callback which allows you to find out which
widget sent the event via the
event's widget attribute:
def showButton(self, event):
button = event.widget
print button['text']
I hope this helps
Michael
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor