Python PyGTK ListView 排序

标签 python listview sorting pygtk

我在使用 PyGTK 时遇到了 ListView 问题。情况如下:

假设我们有一个 ListView ,其中包含一个包含两行的播放列表:歌曲名称和艺术家:

Song 1, Artist C
Song 2, Artist A
Song 3, Artist B

(实际上,还有更多列)

每一行都可以用来对 View 进行排序。按艺术家排序,将产生以下结果:

Song 2, Artist A
Song 3, Artist B
Song 1, Artist C

我现在需要的是播放列表的当前顺序。假设播放器播放歌曲 3(艺术家 B),歌曲结束,但用户通过按艺术家排序更改了顺序。播放列表中的下一首歌曲现在是歌曲 1。

gtk.ListStore 仍然包含旧顺序,这意味着播放器将在歌曲 3 之后停止,因为播放列表在重新排序之前在此结束。

我不需要列表或 TreeView 中歌曲的路径,因为歌曲 1 始终具有 (0,)。我需要的是 View 中列表的当前顺序。

我尝试了很多,但没有找到解决方案。如果需要,我可以添加代码。

更新:

我添加一些代码来澄清:

class Player:
    def __init__(self):

    "Window stuff.."

    self.treeView = gtk.TreeView(self.create_model())
    self.treeView.set_rules_hint(True)
    select = self.treeView.get_selection()
    select.connect("changed", self.on_tree_selection_changed)
    self.treeView.connect("button-press-event", self.on_double_click)


    "Window stuff.. Packing etc."


def create_model(self):
    """Returns a gtk.ListStore"""
    store = gtk.ListStore(str, str, str, str, int)
    for song in self.songs:
        store.append([song.track, song.title, song.artist, song.get_length(), song.id])
    return store


def create_columns(self, treeView):

    rendererText = gtk.CellRendererText()
    column = gtk.TreeViewColumn("Track", rendererText, text=0)
    column.set_sort_column_id(0)
    treeView.append_column(column)

    rendererText = gtk.CellRendererText()
    column = gtk.TreeViewColumn("Title", rendererText, text=1)
    column.set_sort_column_id(1)    
    treeView.append_column(column)

    rendererText = gtk.CellRendererText()
    column = gtk.TreeViewColumn("Artist", rendererText, text=2)
    column.set_sort_column_id(2)    
    treeView.append_column(column)

    rendererText = gtk.CellRendererText()
    column = gtk.TreeViewColumn("Length", rendererText, text=3)
    column.set_sort_column_id(3)    
    treeView.append_column(column)

    rendererText = gtk.CellRendererText()
    column = gtk.TreeViewColumn("Id", rendererText, text=4)
    column.set_sort_column_id(4)   

最佳答案

我只是不想使用 TreeModelSort(childmodel)

感谢大家的帮助!

解决办法:

self.sorted_model = gtk.TreeModelSort(self.list_store())

def get_current_order(self):
    current_order = []
    widget = self.sorted_model
    for item in widget:
        current_order.append(item[5])
    return current_order

关于Python PyGTK ListView 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24569068/

相关文章:

python 多行不能与/运算符一起使用

python - 为什么我的 Django 代码在出现错误时不回滚更改?

python - 如何在 Google Colaboratory 中导入 face_recognition?

xaml - 在 UWP 中保持 ListView.HeaderTemplate 可见/静态/粘性

c# - 获取 ListView 中Label的值

mongodb - 在 NOSQL 数据库中搜索 GPS 点的最佳方法

java - 希望使用 CompareTo 创建示例数据并将其添加到排序集中

algorithm - 不平衡分区会影响归并排序的复杂度吗

python - 比较列表中的字符串

c# - 为什么我需要在添加另一个项目之前删除 ListView 中的当前项目?