Skip to content

Instantly share code, notes, and snippets.

@pablopalacios
Created January 15, 2016 11:35
Show Gist options
  • Save pablopalacios/af99c84debdd5907b61a to your computer and use it in GitHub Desktop.
Save pablopalacios/af99c84debdd5907b61a to your computer and use it in GitHub Desktop.
Tradução da documentação de Gtk.ListBox

Gtk.ListBox

O Gtk.ListBox é um container vertical que possui como filhos objetos do tipo Gtk.ListBoxRow (uma tradução para row é linha). Essas linhas (rows) podem ser dinamicamente ordenadas e filtradas e cabeçalhos para a lista podem ser adicionados dinamicamente em função do conteudo da linha (row). Também é possível interagir com uma Gtk.Listbox utilizando o mouse e o teclado, além de ser possível selecionar linhas como em uma lista comum (não sei qual a qual lista ele se refere, deve ser um outro widget do Gtk).

Geralmente a Gtk.ListBox é uma boa alternativa no lugar de uma Gtk.TreeView, especialmente quando no conteúdo da lista há algum layout mais complicado que não é possível de se fazer em uma Gtk.CellRenderer (esse é o objeto utilizada pela GtkTreeView para renderizar as linhas de uma lista) ou quando ele precisa ser mais interativo (ex. ter um botão nele).

Embora uma Gtk.ListBox deve possuir como filhos apenas Gtk.ListRow, você pode adicionar qualquer tipo de widget nela utilizando Gtk.Container.add() (se você olhar o desenho verá que Gtk.ListBox herda de Gtk.Container, logo, é só chamar sua_box.add(seu_widget)), e o widget Gtk.ListBoxRow será automaticamente inserido entre a lista e o widget.

As linhas da lista, ou melhor, as Gtk.ListBoxRows, possuem duas propriedades importantes: ativáveis e selecionáveis. Se uma linha (row) é ativável, o sinal ‘row-activated’ será emitido quando o usuária tentar ativá-la (não sei que ação é essa, talvez clicar nela). Se a linha (row) é selecionável, a linha ficará marcada como selecionada (com fundo azul eu acho) quando o usuário tentar selecioná-la.

O widget Gtk.ListBox foi adicionado na versão 3.10 do GTK+.

O acho ser importante daqui

  • É bacana saber que uma listbox pode ser ordenada e filtrada, mas

talvez não será preciso disso.

  • Acho que o pessoal do Music quer trocar tudo para ListBox no lugar da TreeView, pois é possível colocar nas rows qualquer coisa
  • Se um botão pode ser clicado, uma linha pode ser ativada, ‘clicked’ é para botões e ‘row-activated’ é para listas.
  • É necessário conectar a lista ao evento ‘row-activated’.
  • Com esse evento, row-activated, você consegue chamar uma função que dá play na música em que está na row.

Gtk.ListBox.bind_model

Como chamar

sua_listbox.bind_model(model, create_widget_func, *user_data)

Parâmetros

  • model (Gio.ListModel ou None) – the Gio.ListModel to be bound to box
  • create_widget_func (Gtk.ListBoxCreateWidgetFunc or None) – a function that creates widgets for items or None in case you also passed None as model
  • user_data (object) – user data passed to create_widget_func

descrição

Vincula um model a ListBox (box daqui em diante)

Se um model já foi vinculado a uma box, o vínculo antigo é destruído.

Os conteúdos da box são apagados e depois preenchidos com os widgets que representam items no model (pense no model como uma lista abstrata, e os itens são as linhas). A box é atualizada sempre que o model se modificar. Se o model for None, a box ficará vazia (esse é um jeito de zerar a lista: sua_listbox.bind_model(None, None) ).

É indefinido o que acontece quando se adiciona ou remove diretamente os widgets quando há um vínculo entre um model e uma box.

Note que usar um model não permitirá utilizar os métodos de ordenamento e filtragem da listbox. Caso você deseje essa funcionalidade, o próprio model deverá possuir métodos para isso.

o que acho importante

O lance é assim, o model só armazena dados. No entanto, ele estará atrelado a uma função responsável por pegar cada dado e apresentá-lo em forma de widget. Essa função será chamada toda vez que um dado novo for adicionado no model.

A listbox com um model possui um lado real e um lado virtual. O lado virtual é o model, onde nada é visto visualmente. Para fazer a ponte para o mundo real, existe a função que foi atrelada ao model, responsável por retornar um widget (ou seja, algo real).

O seu programa pode precisar de apenas um model, criado apenas uma vez. Conforme os dados forem entrando e saindo do model, a listbox será atualizada automaticamente por meio da função atrelada.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment