1
我有一個GTK窗口設計如下我的窗口,的PyGTK 2:TreeView的是伸出甚至帶滾動條啓用
-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();
GTK + 2可能不會將部分可見行滾動到視圖中;這對於GTK + 2程序來說是正常的,但對於Windows程序來說是不常見的。 GTK + 3修復了這種行爲。我不確定如何在GTK + 2中解決這個問題;抱歉。 – andlabs
我希望解決方案應該也適用於gtk2 +,因爲有很多應用程序在這個滾動窗口中運行 – Ashwin
@andlabs在OP的示例中,使用鍵盤滾動根本不起作用,而不僅僅用於部分可見行。這對於GTK 2來說絕對不是正常的,並且是不正確使用'add_with_viewport'的結果(通過比較工作示例發現的)。 – user4815162342