Tentar criar um GtkTreeView a partir do Python parece não funcionar

3

Estou escrevendo um aplicativo usando o Gtk / PyGI e preciso criar uma barra lateral com uma árvore semelhante ao Nautilus .

No entanto, Gtk se recusa a cooperar comigo. Eu tentei ambos com o Glade e o GtkBuilder (criando o GtkTreeStore com uma coluna gchararray ) e com este código:

def create_widgets(self):
  self.hbox = Gtk.Box(orientation = Gtk.Orientation.HORIZONTAL)
  self.add(self.hbox)
  self.treestore = Gtk.TreeStore(str)
  self.treeview = Gtk.TreeView(self.treestore)
  self.treestore.append(["Item 1"])
  self.treestore.append(["Item 2"])
  self.hbox.pack_start(self.treeview, True, True, 0)

As duas versões aumentam um TypeError: Expected Gtk.TreeIter, but got StructMeta começando no primeiro self.treestore.append() do meu código e escorrendo pelos arquivos da biblioteca.

Eu acho que é porque o .append do GtkTreeStore também pega um GtkTreeIter, mas se eu passar algo como "0" como o primeiro argumento nada muda, se eu passar algo como self.treestore.get_iter("0") ele comete erros dizendo que é um caminho de árvore inválido e se eu passar None funciona, mas mostra uma janela vazia .

Eu tentei substituir o GtkTreeStore por um GtkListStore. O resultado não causa erros - em vez disso, mostra a mesma janela vazia de antes .

Então, o que estou fazendo de errado? Eu passei pelos documentos uma e outra vez, mas ainda não consigo descobrir isso.

    
por Andy C. 25.06.2012 / 11:29

2 respostas

4

Um Gtk.TreeStore e Gtk.ListStore são diferentes porque Gtk.ListStore é uma lista simples na qual você adiciona linhas como uma lista, enquanto Gtk.TreeStore contém dados pai / filho, portanto, o pai é Gtk.TreeIter e uma lista como linha.

parent_iter = treestore.append(None, ["parent row"])
treestore.append(parent_iter, ["child row"])

link

Quanto à janela vazia, dê uma olhada nas vistas seção dos documentos.

    
por Timo 25.06.2012 / 12:58
0

Me deparei com essa demonstração que usa uma TreeStore: link

    
por Wayne 25.06.2012 / 18:17