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

Discussion in 'Python' started by kamu, Aug 6, 2007.

  1. kamu

    kamu Guest

    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
    kamu, Aug 6, 2007
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris Bond
    Replies:
    2
    Views:
    1,150
    Steve Drake
    Oct 30, 2003
  2. dataangel

    PyGTK Popup menu?

    dataangel, Mar 18, 2005, in forum: Python
    Replies:
    0
    Views:
    767
    dataangel
    Mar 18, 2005
  3. abargaddon
    Replies:
    0
    Views:
    1,037
    abargaddon
    Jan 17, 2008
  4. D
    Replies:
    0
    Views:
    197
  5. Jens Peter Hansen
    Replies:
    7
    Views:
    499
    Randy Webb
    Jun 19, 2004
Loading...

Share This Page