On Sat, Sep 13, 2008 at 1:37 PM, Karl Ostmo <kos...@purdue.edu> wrote:
> Does anyone know what is wrong with my usage of scroll_to_cell( ) ? When I > run the program below, after I click on a row and scroll such that it is out > of view, I would expect that when I click on the "Scroll to highlighted row" > button that the row would be brought back into view. > > Thanks, > Karl > > #!/usr/bin/python > > from pygtk import require > require('2.0') > import gtk, gobject > > class TreeviewTest(gtk.Window): > def __init__(self): > gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL ) > self.connect("destroy", self.destroy) > > vbox = gtk.VBox(False, 5) > self.add( vbox ) > > button = gtk.Button("Scroll to highlighted row") > button.connect("clicked", self.cb_scroll) > vbox.pack_start(button, False, False) > > self.tv = gtk.TreeView( gtk.TreeStore(gobject.TYPE_STRING, > gobject.TYPE_STRING) ) > > for i, colname in enumerate(["Index", "Name"]): > self.tv.append_column( gtk.TreeViewColumn(colname, > gtk.CellRendererText(), text=i) ) > > for i in range(20): > self.tv.get_model().append(None, row=(str(i), "Foo")) > > scrolled_window = gtk.ScrolledWindow() > scrolled_window.add_with_viewport(self.tv) > vbox.pack_start(scrolled_window, True, True) > > self.show_all() > > def cb_scroll(self, widget): > selection = self.tv.get_selection() > tm, tree_iter = selection.get_selected() > path = tm.get_path(tree_iter) > print path > self.tv.scroll_to_cell(path) > # gobject.idle_add(self.tv.scroll_to_cell, path) # This doesn't > work either > > def destroy(self, widget, data=None): > gtk.main_quit() > > if __name__ == "__main__": > application = TreeviewTest() > gtk.main() > > I ran into this problem again recently and finally solved it. Google turned up my old post, so I will post the resolution in case it helps someone else. The error in the above code is my use of the "add_with_viewport" method. Since a treeview has native scrolling capability, I should have used the "add" method instead (see http://www.pygtk.org/docs/pygtk/class-gtkscrolledwindow.html#method-gtkscrolledwindow--add-with-viewport). Making that change to the code above fixes it! HTH, Karl
_______________________________________________ pygtk mailing list pygtk@daa.com.au http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://faq.pygtk.org/