[pygtk] change cursor on threeview header widget
Alessandro Dentella
sandro at e-den.it
Tue Nov 10 06:30:33 WST 2009
Hi,
some time ago [1] I tried hard to make a treeview header widget to be
sensitive to press-event, with no luck.
Now I just want to change the cursor but I can't do it eather.
I can change the widget into a Label + EventBox, make it hihglight when
mouse hoovers it but I can't make the EventBox change the cursor.
The attached code is my attempt to make it change the cursor. Does anybody
know how to make it work?
TIA
sandro
*:-)
[1] http://www.mail-archive.com/pygtk@daa.com.au/msg17784.html
--
Sandro Dentella *:-)
http://sqlkit.argolinux.org SQLkit home page - PyGTK/python/sqlalchemy
----------------------------------------------------------------------
import gtk
HAND2 = gtk.gdk.Cursor(gtk.gdk.HAND2)
LBL_HOOVER_STYLE = gtk.gdk.color_parse('red')
class TreeMenu(object):
def __init__(self):
window = gtk.Window()
vbox = gtk.VBox()
label = self.make_label("label con hand2")
mb = gtk.MenuBar()
mb2 = gtk.MenuBar()
tv = gtk.TreeView()
self.m = create_menu_button("File")
window.add(vbox)
vbox.add(mb)
vbox.add(label)
vbox.add(tv)
mb.append(self.m)
window.show_all()
liststore = gtk.ListStore(str, str)
tv.set_model(liststore)
liststore.append(['abc', 'xyz'])
cr = gtk.CellRendererText()
cr2 = gtk.CellRendererText()
tc = gtk.TreeViewColumn('A', cr, text=0)
tc2 = gtk.TreeViewColumn('B', cr, text=1)
tc.set_clickable(True)
tc2.set_clickable(True)
m = create_menu_button("I'm a MenuItem with submenu")
ev_box = self.make_label("I'm a label with changed cursor")
# this to experiment with MenuItem as
tc.set_widget(mb2)
tc2.set_widget(ev_box)
mb2.append(m)
mb2.show_all()
tc.set_clickable(True)
tv.append_column(tc)
tv.append_column(tc2)
window.show_all()
def ene_cb(self, eb, event):
eb.get_child().set_state(gtk.STATE_PRELIGHT)
return True
def lne_cb(self, eb, event):
eb.get_child().set_state(gtk.STATE_NORMAL)
return True
def make_label(self, label="label"):
label = gtk.Label(label)
event_box = gtk.EventBox()
event_box.add(label)
event_box.connect('realize', self.realize_cb)
event_box.connect('enter-notify-event', self.ene_cb)
event_box.connect('leave-notify-event', self.lne_cb)
label.modify_fg(gtk.STATE_PRELIGHT, LBL_HOOVER_STYLE)
event_box.connect("realize", self.realize_cb)
event_box.show_all()
return event_box
def realize_cb(self, widget):
widget.window.set_cursor(HAND2)
def create_menu_button(label):
m = gtk.MenuItem(label)
menu = gtk.Menu()
m.set_submenu(menu)
menu.append(gtk.MenuItem('Item 1'))
menu.append(gtk.MenuItem('Item 2'))
menu.append(gtk.MenuItem('Item 3'))
m.show_all()
return m
t = TreeMenu()
gtk.main()
More information about the pygtk
mailing list