[pygtk] Treeview Tooltips
Stephen Langer
stephen.langer at nist.gov
Thu May 4 21:54:02 WST 2006
On May 4, 2006, at 8:02 AM, Frederic Back wrote:
> Hello,
>
> is there a simple way to add tooltips to cells in a treeview?
>
> If not, I guess that catching button events on the treeview and
> popping
> up menues are the way to go.
>
> Cheers,
> Fred
Here's an e-mail exchange I had about adding tooltips to menus.
Since menus use treeviews underneath, I imagine the same hack should
work. (The original e-mails don't seem to be in the archive...)
Please note that the code here is due to Phil Dumont, not me. The
only substantial change I made to get it to work in my context was to
put a try/except around the line "cv_parent = cell_view.get_parent
()". If you're using arrow keys to navigate a menu, sometimes
cell_view is a TreeViewColumn and doesn't have a get_parent method.
-- Steve
On Jul 8, 2005, at 11:28 AM, Phil Dumont wrote:
> Steve,
>
> I looked pretty hard for how to do this (because I wanted
> to do it too), and pretty well convinced myself that there
> is no "right" way to do it.
>
> But I have discovered a HACK that seems to accomplish it
> reasonably well.
>
> That this should work is not at all supported by the
> documentation, and was discovered by trial-n-error.
> (Who knows; if you are running a sligtly different release
> than I, it may not ever work for you.)
>
> See the code at the end.
>
> The 'tipmap' stuff is to avoid some flicker the first time
> you hover over an item after a ComboBox popup. Since the
> cell_layout_data_func() gets called every time the cell is
> renderered, the same tooltip can get set on the same widget
> multiple times, causing choppiness.
>
> Even with that bit of choppiness removed, there's still some
> left. The tooltip disappears every time the entry gets a
> motion event, reappearing after brief motionlessness.
> Normally (like the top-level tooltip on the ComboBox itself),
> the tooltip stays put for motion events, only going away on
> a leave event. Oh well.
>
> If you come across a better way to do this, *please* let me
> know.
>
> phil dumont
>
>
>> Steve Langer
>> Thu, 30 Jun 2005 09:42:53 -0700
>>
>> Hi --
>>
>>
>> I hope this isn't a faq -- I couldn't find the answer in the
>> official faq or in the list...
>>
>> I'm belatedly porting a large application from
>> gtk+1.2/pygtk-0.6.x to gtk2.6. With gtk+1.2 I was able to
>> add tooltips to the individual menu items in the pull-down
>> menu part of a GtkOptionMenu. Each entry in the menu was a
>> GtkMenuItem, to which I could assign a tooltip. This was
>> very useful, because users could see a description of a menu
>> item before selecting it.
>>
>> With gtk2, I have to use a ComboBox instead. Is it possible
>> to assign tooltips to the items?
>>
>> Many thanks.
>> -- Steve
>>
>> --
>
> ############# The sample code: #############
> import gtk, gobject
>
> w=gtk.Window()
> w.connect_after('delete-event', lambda *args: gtk.main_quit())
>
> tips = gtk.Tooltips()
> tipmap = {}
>
> def cell_layout_data_func(cell_view, cell_renderer, model, iter):
> idx = model.get_path(iter)[0]
> item_text = model.get_value(iter, 0)
> cell_renderer.set_property('text', item_text)
> tip_text = "tooltip for ComboBox Entry '%s'"%item_text
> cv_parent = cell_view.get_parent()
> if isinstance(cv_parent, gtk.MenuItem) and (cv_parent not in
> tipmap
> or tipmap[cv_parent] != tip_text):
> tipmap[cv_parent] = tip_text
> tips.set_tip(cv_parent, tip_text)
>
> cb=gtk.ComboBox()
> mod=gtk.ListStore(gobject.TYPE_STRING)
> cb.set_model(mod)
> cr=gtk.CellRendererText()
> cb.pack_start(cr)
> for item in ['this','is','a','test']:
> cb.append_text(item)
> cb.set_active(0)
> cb.set_cell_data_func(cr, cell_layout_data_func)
>
> eb = gtk.EventBox()
> eb.add(cb)
>
> tips.set_tip(eb, 'tip on ComboBox')
>
> w.add(eb)
> w.show_all()
>
> gtk.main()
>
>
>
--
-- EMail: stephen.langer at nist.gov Phone: (301)
975-5423 --
-- WWW: http://math.nist.gov/mcsd/Staff/SLanger/ Fax: (301)
975-3144 --
-- Mail: NIST; 100 Bureau Drive -- Stop 8910; Gaithersburg, Md
20899-8910 --
-- "I don't think this will work. That's why it's
science." --
-- Naomi Langer, 17 Feb
2003 --
More information about the pygtk
mailing list