pygtk how to get treeview row(name) from a popup menu

kamu anuroop.m at gmail.com
Mon Aug 6 12:43:58 CEST 2007


hi all,
thanks in advance for your valuable reply.

I have a pygtk code. which is a simple tree view. and when i click on
any row of the tree view, i get a menu poped up. and i can click on
the options in the poped up menu. and it goes to a function. up to
this its fine with me. but now from this function, how do i get the
name of the tree row which i clicked. ?? I tried some get_path &
get_iter method and tried to pass it with the call. but i could not
get it. I pasted the test code which used. please correct me if i am
doin any mistake, though i am new to this language.
the code is pasted below.
in the function print_A(), i tried some things. ultimately i wanted to
get the name of the row in tree from this function. (ie: like 'CHILD 1
1'  or 'PARENT 2' )

any comments on these will be helpful to me. because i am very new to
pygtk

#------------------------
test.py------------------------------------------------------------------------------
#!/usr/bin/env python

# generic treeview

import pygtk
pygtk.require('2.0')
import gtk
import os

class test_tree:

   # close the window and quit
   def delete_event(self, widget, event, data=None):
       gtk.main_quit()
       return False

   def create_menu(self, window,event, data=None):
#       merge = gtk.UIManager()
#       self.set_data("ui-manager", merge)
#       accel = gtk.AccelGroup(merge)
       item_factory = gtk.ItemFactory(gtk.Menu, "<main>", None)
       item_factory.create_items(self.menu_items)
#       window.add_accel_group(accel)
       self.item_factory = item_factory

       return item_factory.get_widget("<main>")


   def button_press_callback(self, treeview, event, data=None):
       if event.button == 3:
           x = int(event.x)
           y = int(event.y)
           time = event.time
           pthinfo = self.treeview.get_path_at_pos(x,y)
        #   TreeSelection =
self.treeview.get_selection().get_treeview()
          # tre = gtk.TreeSelection.get_treeview()
         #  print "***"
          # print treeselection
          # print "***"
           if pthinfo is not None:
               path,col,cellx,celly = pthinfo
               self.treeview.grab_focus()
               self.treeview.set_cursor(path,col,0)
               menu = self.create_menu(self,self.window,None)
               menu.popup(None,None,None,event.button,event.time)

           return 1
   def print_A(self, w, data):
       iter =
self.menu_items.iter_children(self.menu_items.get_iter(self.menu_path))
       #iter = self.treeview.get_path()
       #aa = self.treestore.get_path(iter)
       print iter

       return 1

   def print_B(self, w, data):
       print "B"
       return 1

   def print_C(self, w, data):
       print "C"
       return 1

   def print_D(self, w, data):
       print "D"
       return 1

   def print_E(self, w, data):
       print "E"
       return 1


   def __init__(self):
       self.menu_items = (
                 ( "/_A",     "<control>O", self.print_A, 0, None ),
                 ( "/_B",    "<control>I", self.print_B, 0, None ),
                 ( "/_C",    "<control>H", self.print_C, 0, None ),
                 ( "/_D",    "<control>F", self.print_D, 0, None ),
                 ( "/_E",    "<control>U", self.print_E, 0, None ),
               )

       # Create a new window
       self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

       self.window.set_title("Project")

       self.window.set_size_request(200, 200)

       self.window.connect("delete_event", self.delete_event)

       # create a TreeStore with one string column to use as the model
       self.treestore = gtk.TreeStore(str)

       # add some data now - 4 rows with 2 child rows each
       for parent in range(4):
           piter = self.treestore.append(None, ['PARENT %i' %
parent])
           for child in range(1):
               self.treestore.append(piter, ['CHILD1 %i' % parent])
               self.treestore.append(piter, ['CHILD2 %i' % parent])

       # create the TreeView using treestore
       self.treeview = gtk.TreeView(self.treestore)

       self.treeview.connect ("button_press_event",
self.button_press_callback, None)
       iter = self.treestore.get_iter_first()

       # create the TreeViewColumn to display the data
       self.tvcolumn = gtk.TreeViewColumn('project')

       # add tvcolumn to treeview
       self.treeview.append_column(self.tvcolumn)

       # create a CellRendererText to render the data
       self.cell = gtk.CellRendererText()

       # add the cell to the tvcolumn and allow it to expand
       self.tvcolumn.pack_start(self.cell, True)

       # set the cell "text" attribute to column 0 - retrieve text
       # from that column in treestore
       self.tvcolumn.add_attribute(self.cell, 'text', 0)

       # make it searchable
       self.treeview.set_search_column(0)

       # Allow sorting on the column
       self.tvcolumn.set_sort_column_id(0)

       # Allow drag and drop reordering of rows
       self.treeview.set_reorderable(True)

       self.window.add(self.treeview)

       self.window.show_all()

def main():
   gtk.main()

if __name__ == "__main__":
   test_tree = test_tree()
   main()
#-------
end--------------------------------------------------------------------


-thanks a lot
-Anuroop




More information about the Python-list mailing list