I am writing an pygtk app that uses a treeview, which has a connection to button_press_event
. What I can't figure out is how to pass the information about the treeview (specifically which row is clicked) to a gtk.Menu
or another method. If I used the row-activated
signal, it passes in the row and column information in as an argument, but this does not happen with button_press_event
. Here is the code in question:
self.liststore = gtk.ListStore(str,int, int, int,str, 'gboolean')
self.treeview = gtk.TreeView(self.liststore)
self.treeview.connect("button_press_event",self.serverListEvent)
self.treeview.set_search_column(0)
self.draw_columns(self.treeview)
self.blackmenu = gtk.Menu()
self.bitem = gtk.MenuItem("Blacklist server")
self.blackmenu.append(self.bitem)
self.bitem.connect("activate",self.blacklistServer)
self.bitem.show()
def serverListEvent(self,treeview,event):
x = int(event.x)
y = int(event.y)
time = event.time
model = treeview.get_model()
pthinfo = treeview.get_path_at_pos(x, y)
if pthinfo is not None:
path, col, cellx, celly = pthinfo
# Error here for the model with the column
print 'url clicked '+model[col][0]
treeview.grab_focus()
treeview.set_cursor( path, col, 0)
# Popup blacklist menu on right click
if event.button == 3:
self.blackmenu.popup( None, None, None, event.button, time)
# Join game on double click
elif event.type == gtk.gdk._2BUTTON_PRESS:
self.joinGame(treeview,model[col][0])
return True
I then need to pass the information from the clicked row to the self.joinGame
and self.blacklistServer
methods, but don't know how to do this either.