[Tkinter-discuss] Create Buttons on the fly

John Jack itsmilesdavis at gmail.com
Mon Aug 31 19:15:50 CEST 2009


That is very helpful.
I appreciate your expeditious response.

Thanks,
JJ.

On Mon, Aug 31, 2009 at 12:33 PM, Cameron Laird <Cameron at phaseit.net> wrote:

> On Mon, Aug 31, 2009 at 11:40:07AM -0400, John Jack wrote:
>                        .
>                        .
>                         .
> > I have a long list of objects, which I print to a GUI.  I want to filter
> > this list, print the filtered list to the GUI, but maintain the ability
> to
> > look at the previous lists.
> >
> > My program currently takes the list (L1), prints it to a Listbox, and
> adds a
> > button (B1) for the list.  Next, I filter the list, print the new
> filtered
> > list (L2 subset of L1) to the same Listbox (removing the elements of L1
> not
> > in L2), and add an additional button for the new list. And so on...
> >
> > How do I find a way to associate the old list L1 to the command for the
> > button (B1)?  Note, I do not want to create a separate command for each
> > button because I want to run an unlimited number of filters.  I need to
> have
> > B1 linked to L1, B2 linked to L2, B3 linked to L3, etc.
> >
> > Here is some relevant code (n.b., the whole project is much larger, so
> this
> > is merely a snippet).
> >
> > #n.b., L from the description above is all_entities.  So, L1 is
> > all_entities[1], etc.
> > #filter_group is an index tracking the current group to be filtered.
> >
> >     #Filter the list
> >     def search_entities(self):
> >         tmp1 = askstring('Search Entity','Entity
> Type',initialvalue='gene')
> >         filtered = []
> >         #Create sublist
> >         for ent in self.backend.all_entities[self.filter_group]:
> >             if ent.etype.endswith("findthisstring"):
> >                 filtered.append(ent)
> >
> >         #Store sublist
> >         self.backend.all_entities.append(filtered)
> >         self.filter_group += 1
> >         self.add_filter_button()
> >
> >     def add_filter_button(self):
> >         tmp = 'B%s' % self.filter_group
> >         filt = Button(self,text = tmp,command=self.fill_listbox(self))
> >         filt.grid(row=3,column=self.filter_group,sticky=E)
> >         self.fill_listbox()
> >
> >     def fill_listbox(self):
> >        #clear listbox
> >        if self.ent_listbox.size() > 0:
> >             self.ent_listbox.delete(0,END)
> >         #Restore list box
> >         for ent in self.backend.all_entities[self.filter_group]:
> >             self.ent_listbox.insert(END,ent.name)
> >
> > The way my code exists now, I would need to modify the variable
> filter_group
> > when I click a button.  How can I accomplish this?  How do I tell
> > filter_group to be 1 if I click button 1 and 2 if I click button 2?
>                         .
>                        .
>                        .
> The answer is implicit in <URL:
> http://tkinter.unpythonic.net/wiki/Widgets/Button >, especially
> in the section titled "Parameter-passing".  Is that enough of a
> hint for you to reach the answer on your own?  Otherwise, I
> expect one of us will make time over the next thirty hours or so
> to provide an explicit coding.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tkinter-discuss/attachments/20090831/21c9353e/attachment.htm>


More information about the Tkinter-discuss mailing list