我有一个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