[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