I have a Gtk window design as follows,
-Window
|- Scroll_Window
|- TreeView
With this design I am able to see tree view inside a scroll window with vertical scroll bar enabled. But the problem is, tree-view is extending out of my window. So if if do down the tree-view using arrow key, the tree-view cursor is going out of view (ie. Going down the actual scroll window).
But if I use my mouse to scroll the tree-view, I am able to see my tree-view data properly.
Expected behavior is on-arrow-down key press, tree-view should scroll by itself with cursor always visible.
Code:
import sys;
import dbf, gtk, pygtk, gobject;
pygtk.require('2.0');
w = gtk.Window(gtk.WINDOW_TOPLEVEL);
w.set_title("TEST");
sw = gtk.ScrolledWindow();
sw.set_border_width(10);
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC);
treeView = gtk.TreeView();
listView = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING);
inData = [["a","1"],["b","bb"],["c","cc"],["d","dd"],["e","ee"],["f","ff"],["g","gg"],["h","hh"],["i","ii"],["j","jj"],["k","kk"],["l","ll"],["n","nn"]];
for nameTinList in inData:
listIter = listView.append();
listView.set_value(listIter, 0, nameTinList[0]);
listView.set_value(listIter, 1, nameTinList[1]);
column = gtk.TreeViewColumn("Name", gtk.CellRendererText(), text=0);
column.set_resizable(False);
treeView.append_column(column);
column = gtk.TreeViewColumn("DESC", gtk.CellRendererText(), text=1);
column.set_resizable(False);
treeView.append_column(column);
treeView.set_model(listView);
sw.add_with_viewport(treeView);
w.add(sw);
w.show_all();
gtk.main();
w.destroy();
Replace sw.add_with_viewport(treeView)
with sw.add(treeView)
, and scrolling with keyboard will work correctly.
As the documentation states, add_with_viewport
is for child widgets without native scrolling capabilities. For widgets that implement scrolling, such as gtk.TextView
or gtk.TreeView
, the add
method (inherited from gtk.Container
) should be used.