PyGTK 2:即使启用了滚动条,TreeView 也会超出我的 window
PyGTK 2: TreeView is extending out of my window even with scroll bar enabled
我有一个 Gtk window 设计如下,
-Window
|- Scroll_Window
|- TreeView
通过这种设计,我可以在启用了垂直滚动条的滚动 window 中看到树视图。但问题是,树视图超出了我的 window。因此,如果使用箭头键向下移动树视图,则树视图光标将超出视图(即向下滚动实际滚动 window)。
但是如果我用鼠标滚动树视图,我就能正确地看到我的树视图数据。
预期的行为是按下箭头键,树视图应自行滚动,光标始终可见。
代码:
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();
输出:
将 sw.add_with_viewport(treeView)
替换为 sw.add(treeView)
,使用键盘滚动将正常工作。
如 the documentation 所述,add_with_viewport
适用于没有本机滚动功能的子窗口小部件。对于gtk.TextView
或gtk.TreeView
等实现滚动的widget,应该使用add
方法(继承自gtk.Container
)。
我有一个 Gtk window 设计如下,
-Window
|- Scroll_Window
|- TreeView
通过这种设计,我可以在启用了垂直滚动条的滚动 window 中看到树视图。但问题是,树视图超出了我的 window。因此,如果使用箭头键向下移动树视图,则树视图光标将超出视图(即向下滚动实际滚动 window)。
但是如果我用鼠标滚动树视图,我就能正确地看到我的树视图数据。
预期的行为是按下箭头键,树视图应自行滚动,光标始终可见。
代码:
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();
输出:
将 sw.add_with_viewport(treeView)
替换为 sw.add(treeView)
,使用键盘滚动将正常工作。
如 the documentation 所述,add_with_viewport
适用于没有本机滚动功能的子窗口小部件。对于gtk.TextView
或gtk.TreeView
等实现滚动的widget,应该使用add
方法(继承自gtk.Container
)。