Kevin Walzer wrote: > I'm trying to set the active item in a Tkinter listbox to my > application's currently-defined default font. > > Here's how I get the fonts loaded into the listbox: > > self.fonts=list(tkFont.families()) > self.fonts.sort() > > for item in self.fonts: > self.fontlist.insert(END, item) #self.fontlist is the > ListBox instance > > > So far, so good. But I don't know how to set the active selection in the > listbox to the default font. All the methods for getting or setting a > selection in the listbox are based on index, not a string. And using > standard list search methods like this: > > if "Courier" in self.fontlist: > print "list contains", value > else: > print value, "not found" > > returns an error: > > TypeError: cannot concatenate 'str' and 'int' objects > > So I'm stuck. Can someone point me in the right direction?
I would keep a separate data structure for the fonts and update the scrollbar when the list changed. This would help to separate the representation from the data represented. Here is a pattern I have found most useful and easy to maintain: # untested class FontList(Frame): def __init__(self, *args, **kwargs): Frame.__init__(self, *args, **kwargs) self.pack() self.fonts = list(kwargs['fonts']) self.default = self.fonts.index(kwargs['default_font']) self.lb = Listbox(self) # add scrollbar for self.lb, pack scrollbar # pack self.lb self.set_bindings() self.update() def set_bindings(self): # put your bindings and behavior here for FontList components def update(self): self.lb.delete(0, END) for f in self.fonts: self.lb.insert(f) self.highlight() def highlight(self): index = self.default self.lb.see(index) self.lb.select_clear() self.lb.select_adjust(index) self.lb.activate(index) def change_font(self, fontname): self.default = self.fonts.index(fontname) self.highlight() def add_font(self, fontname, index=None): if index is None: self.fonts.append(fontname) else: self.fonts.insert(index, fontname) self.update() # other methods for adding multiple fonts or removing them, etc. -- James Stroud UCLA-DOE Institute for Genomics and Proteomics Box 951570 Los Angeles, CA 90095 http://www.jamesstroud.com/ -- http://mail.python.org/mailman/listinfo/python-list