У меня проблема со списками при использовании PyGTK. Вот такая ситуация:
Предположим, у нас есть список, содержащий список воспроизведения с двумя строками: название песни и исполнитель:
Song 1, Artist C
Song 2, Artist A
Song 3, Artist B
(На самом деле столбцов еще несколько)
Каждую строку можно использовать для сортировки представления. Сортировка по исполнителю приведет к следующему результату:
Song 2, Artist A
Song 3, Artist B
Song 1, Artist C
Что мне сейчас нужно, так это текущий порядок плейлиста. Предполагая, что игрок воспроизводит композицию 3 (исполнитель B), композиция заканчивается, но пользователь изменил порядок, отсортировав по исполнителю. Следующая песня в плейлисте теперь песня 1.
Gtk.ListStore по-прежнему содержит старый порядок, что означает, что проигрыватель остановится после Песни 3, потому что список воспроизведения закончился здесь до изменения порядка.
Мне не нужен путь к песне в списке или древовидном представлении, так как в песне 1 всегда будет (0,). Мне нужен ТЕКУЩИЙ порядок списка в представлении.
Я много пробовал, но решения не нашел. При необходимости могу добавить код.
Обновлять:
Я добавляю код, чтобы прояснить:
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)