我有一個GTK樹視圖顯示在IE的藝術家子節點藝術家名稱作爲它的父節點及其關聯相冊可以有很多的專輯如何排序GTK樹形與其子從父不同
的樹視圖中的藝術家名稱 - treestore模型連接到TreeView列,以便用戶可以單擊列標題按照升序或降序排列藝術家名稱。
但是,我還需要孩子專輯名稱的固定名稱順序,例如升序或降序
例如 - 在固定升序然後相冊當列標題升序:
MJ -
- Album1MJ
- Album2MJ
PQ -
- Album1PQ
- Album2PQ
ZY -
- Album1ZY
當列標題降序:
ZY -
- Album1ZY
PQ -
- Album1PQ
- Album2PQ
MJ -
- Album1MJ
- Album2MJ
因此,使用GtkTreeModelSort在我的樹視圖上,我已經定義了0列上的set_sort_func
,它是Artist Name列
set_sort_func
是defi ned as:
def _compare(self, model, row1, row2, user_data):
sort_column = 0
value1 = model.get_value(row1, sort_column)
value2 = model.get_value(row2, sort_column)
if value1 < value2:
return -1
elif value1 == value2:
return 0
else:
return 1
這樣排列藝術家名稱。
我的問題是,我應該如何應用子排序來確保專輯名稱具體是以升序還是降序排列?
我使用Gtk3和上面的例子是python2.7
這是我使用的Python代碼:
from gi.repository import Gtk
def _compare(model, row1, row2, user_data):
sort_column = 0
value1 = model.get_value(row1, sort_column)
value2 = model.get_value(row2, sort_column)
if value1 < value2:
return -1
elif value1 == value2:
return 0
else:
return 1
w = Gtk.Window()
w.resize(300, 300)
model = Gtk.TreeStore(str)
model.set_sort_column_id(0, Gtk.SortType.ASCENDING)
artist_iter=model.append(None, ['PQ'])
model.append(artist_iter, ['Album1PQ'])
model.append(artist_iter, ['Album2PQ'])
artist_iter=model.append(None, ['MJ'])
model.append(artist_iter, ['ALBUM1MJ'])
model.append(artist_iter, ['ALBUM2MJ'])
artist_iter=model.append(None, ['ZY'])
model.append(artist_iter, ['ALBUM1ZY'])
tv = Gtk.TreeView(model)
tv.set_headers_clickable(True)
c=0
i=0
renderer = Gtk.CellRendererText()
col = Gtk.TreeViewColumn(c, renderer)
col.add_attribute(renderer, 'text', i)
col.set_clickable(True)
col.set_sort_column_id(0)
col.set_sort_indicator(True)
tv.append_column(col)
tree_sort = Gtk.TreeModelSort(model=model)
tree_sort.set_sort_func(0, _compare, None)
tree_sort.set_sort_column_id(0, Gtk.SortType.ASCENDING)
tv.set_model(tree_sort)
tv.expand_all()
w.add(tv)
w.show_all()
w.connect('destroy', lambda _: Gtk.main_quit())
Gtk.main()
修改我的答案。 – maurelio79
嗨 - 這絕對是一個解決方案(+1),雖然它與單獨的列看起來很奇怪。例如,您不能使用GtkGridlines將藝術家與相冊進行可視化鏈接。如果使用Gtk.TreeModelSort包裝模型,並在排序的模型上使用set_sort_column_id(1),則可以對第二列進行排序。如果可能的話,我寧願使用從視覺角度來看的一列。 – fossfreedom
我同意你的意見。我還閱讀了一些文檔,但沒有發現nothig。 :-(我們確信它是可能的嗎?無論如何,你給了我另一個python練習的想法!無論如何,如果你想添加專輯年份,歌曲持續時間,ecc – maurelio79