source: TreeView Context Menu
import pygtk
pygtk.require("2.0")
import gtk
NAME="TreeView Context Menu"
class ContextMenu(gtk.Menu):
def __init__(self, t):
gtk.Menu.__init__(self)
self.t = t
i = gtk.MenuItem("Menu1")
i.connect("activate", self.response_menu1)
i.show()
self.append(i)
i = gtk.MenuItem("Menu2")
i.connect("activate", self.response_menu2)
i.show()
self.append(i)
def response_menu1(self, widget):
print "menu1 activated"
def response_menu2(self, widget):
print "menu2 activated"
class T_TreeviewContextMenu(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_title("TreeviewContextMenu")
self.set_geometry_hints(min_width=200)
self.connect("destroy", gtk.main_quit)
self.list = gtk.ListStore(int, str)
iter = self.list.append( (0, "toto",) )
self.list.set(iter)
iter = self.list.append( (1, "toto2",) )
self.list.set(iter)
self.treeview = gtk.TreeView()
model = self.treeview.get_selection()
model.set_mode(gtk.SELECTION_SINGLE)
r = gtk.CellRendererText()
self.treeview.insert_column_with_attributes(-1, "List", r, text=1)
self.treeview.set_model(self.list)
self.treeview.connect("cursor-changed", self.on_treeview_cursor_changed)
self.treeview.connect("button_press_event", self.on_button_press_event)
self.treeview.show()
self.add(self.treeview)
def on_button_press_event(self, widget, event):
print "button clicked"
if event.button == 3 and event.type == gtk.gdk.BUTTON_PRESS:
print "1"
c = ContextMenu(self)
c.popup(None, None, None, event.button, event.get_time())
def on_treeview_cursor_changed(self, treeview):
print "Treeview Cursor changed"
s = treeview.get_selection()
(ls, iter) = s.get_selected()
if iter is None:
print "nothing selected"
else:
data0 = ls.get_value(iter, 0)
data1 = ls.get_value(iter, 1)
print "Selected:", data0, data1
t = T_TreeviewContextMenu()
t.show()
gtk.main()