[pygtk] Make the TreeView widget look different (like in Transmission)

Walter Leibbrandt walter at translate.org.za
Mon Jul 27 18:05:22 WST 2009


Op 27/07/2009 09:09, ivanko.rus het geskryf:
> Hello everybody! I am making a little app here, it should be a front-end for
> mencoder and I'd like to have the file list looking like Transmission's
> (BitTorrent client) file list. So, my question is - is there a way to do
> that using PyGTK? Thanks in advance, I'll be grateful for any help!

Good news: It's definitely possible.
Bad news: It's not easy and may become messy.

The way to achive this is by creating a custom cell renderer or by using 
more than one of the standard cell renderers.

Using multiple cell renderers has the disadvantage of only being 
rendered horizontally next to each other. I am not aware of any way to 
change this behaviour (but would be glad if someone else can point it out).

Using custom cell renderers, there are, again, two options:
* Create a cell renderer that will custom-render the entire layout. In 
an attempt to achive a generic solution to this problem, I've created a 
CellRendererWidget that renders an arbitrary widget (meant to be a 
container), but it's not entirely stable. If you're interested, you can 
get the source at 
https://translate.svn.sourceforge.net/svnroot/translate/src/trunk/virtaal/virtaal/views/widgets/cellrendererwidget.py
* Create a cell renderer that combines various other renderers. This 
seems to be a cleaner way (as well as Transmission's way) of doing 
things. Looking at lines 537-544 of 
http://trac.transmissionbt.com/browser/trunk/gtk/torrent-cell-renderer.c 
(the business end of the render_minimal() function), you can see that 
the 4 wrapped cell renderers' rendering functions are simply called with 
modified areas.

HTH,
-- 
Walter Leibbrandt                  Software Developer
Recent blogs:
* Conquering the CellRendererWidget
http://www.translate.org.za/blogs/walter/en/content/conquering-cellrendererwidget



More information about the pygtk mailing list