PyGTK 2:即使启用滚动条,TreeView也会延伸到窗口外

时间:2016-02-13 04:58:35

标签: python scroll treeview gtk pygtk

我有如下的Gtk窗口设计,

-Window
  |- Scroll_Window
    |- TreeView

通过这种设计,我可以在滚动窗口内看到启用了垂直滚动条的树形视图。但问题是,树视图从我的窗口延伸出来。因此,如果使用箭头键向下查看树视图,则树视图光标将离开视图(即,沿着实际滚动窗口向下)。

但是,如果我使用鼠标滚动树视图,我可以正确地看到我的树视图数据。

预期的行为是按下箭头键,树视图应该自动滚动,光标始终可见。

代码:

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();

输出: enter image description here

1 个答案:

答案 0 :(得分:3)

sw.add_with_viewport(treeView)替换为sw.add(treeView),使用键盘滚动即可正常工作。

the documentation所述,add_with_viewport适用于没有本机滚动功能的子窗口小部件。对于实现滚动的小部件,例如gtk.TextViewgtk.TreeView,应使用add方法(继承自gtk.Container)。