Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tkinter Listbox - Different Text colors in one listbox

46 views
Skip to first unread message

rahul...@yahoo.com

unread,
May 29, 2007, 1:02:03 PM5/29/07
to
Hi,
Is it possible to have different items in a listbox in different
colors? Or is it just one color for all items in a listbox?
Thanks
Rahul

kyos...@gmail.com

unread,
May 29, 2007, 2:16:09 PM5/29/07
to

Looks like it has to be the same color and font:
http://www.pythonware.com/library/tkinter/introduction/listbox.htm

Maybe there's a custom listbox in the PMW or Tix modules?

It would appear that wxPython has a control that does allow different
colors (and likely, fonts) called wx.HtmlListBox. I assume it would
allow any kind of html, although I've never played with it for sure.
The demo seems to imply that though.

Mike

Hendrik van Rooyen

unread,
May 30, 2007, 2:47:05 AM5/30/07
to pytho...@python.org
<rahul...@yahoo.com> wrote:

You specify text and foreground colour when you make the box,
so I don't think its possible.

- Hendrik

Eric Brunel

unread,
May 30, 2007, 4:04:56 AM5/30/07
to

AFAIK, this is not possible with a listbox. You can however quite easily
emulate the behaviour of a listbox with a text widget, which allows to mix
fonts and colors in any way you like.

I did it once by creating a sub-class of Tkinter.Text (cannot post the
code here - closed source, sorry...) and all I had to do was:
- make sure the text widget had its state to DISABLED all the time, except
when modifying it;
- removing all the bindings defined in the text widgets (use
widget.bind_class('Text') to get all the events, then widget.bind(event,
lambda e: 'break') to remove them);
- define a new binding for a button click selecting the line under the
cursor;
- define the insert, delete and getcurselection methods, taking care of
treating the special index END.

All in all, this was just a few dozen lines.

HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"

rfg...@gmail.com

unread,
May 30, 2007, 8:04:52 AM5/30/07
to

from Tkinter import *

root = Tk()
l = Listbox(root)
l.pack()
for x in range(10):
l.insert(END, x)
l.itemconfig(2, bg='red', fg='white')
l.itemconfig(4, bg='green', fg='white')
l.itemconfig(5, bg='cyan', fg='white')
root.mainloop()

You can _only_ configurate 'background', 'foreground',
'selectbackground', 'selectforegroud', not font :(

HTH

rahul...@yahoo.com

unread,
May 30, 2007, 12:48:22 PM5/30/07
to

Thanks for the feedback all. I tried the itemconfig method and it
works great.
Thanks

Hendrik van Rooyen

unread,
May 31, 2007, 2:48:48 AM5/31/07
to pytho...@python.org
<rfg...@gmail.com> wrote:

Live and learn, - was not aware you could do this - thanks, nice one.

- Hendrik

0 new messages