Gtk.SelectionMode.MULTIPLE permite a seleção de apenas uma linha no Gtk.TreeView

1

Estou desenvolvendo um aplicativo usando Rapidamente. Eu tenho um Gtk.TreeView com um Gtk.ListStore como seu modelo. O modo de seleção do Gtk.SelectionMode é definido como Gtk.SelectionMode.MULTIPLE.

O problema é que o Gtk.SelectionMode não se comporta como deveria:

  • Apenas uma linha pode ser selecionada por vez.
  • Impossível selecionar várias linhas usando a tecla Ctrl ou Shift.
  • Quando uma linha é selecionada, ela não pode ser desmarcada usando a tecla Ctrl.
  • Nada acontece quando pressiono as teclas de seta.

O problema pode ser facilmente reproduzido criando um novo aplicativo Ubuntu usando Rapidamente (ou você pode baixar um aplicativo de teste abaixo).

$ quickly create ubuntu-application test
$ cd test
$ quickly design

Crie um TreeView com um ListStore como modelo. Defina o modo do GtkTreeSelection para 'Multiple'. Adicione algumas colunas e valores ao ListStore. Adicione alguns TreeViewColumns com CellRendererTexts à Treeview.

$ quickly run -v

Note que você não pode selecionar várias linhas.

Algumas coisas que eu já tentei, mas não alteraram nada:

  • Definindo o modo de seleção no código.

    self.ui.selection.set_mode(Gtk.SelectionMode.MULTIPLE)

    ou

    self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)

  • Movendo o GtkTreeSelection <child> abaixo do GtkTreeViewColumn <child> no arquivo da interface do usuário.

  • Excluindo o GtkTreeSelection do arquivo de interface do usuário e definindo a seleção com

    self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)

Eu estou negligenciando algo óbvio? Ou isso pode ser um bug?

Em uma nota lateral, se você definir a seleção como 'Único', também não será possível desmarcar a linha.

EDITAR

Se você quiser me ajudar, pode fazer o download de um aplicativo de teste aqui em vez de criar um novo projeto com o Quickly por conta própria. Por favor, note que você precisa rapidamente para executá-lo.

$ cd test
$ quickly run

Eu já implementei alguns callbacks para testes em test / test / TestWindow.py. Você pode encontrar a definição da interface do usuário em test / data / ui / TestWindow.ui.

    
por tectux 09.05.2013 / 15:04

2 respostas

0

Eu encontrei a solução para o meu próprio problema.

A propriedade 'can-focus' do Gtk.TreeView está definida para False por padrão. Definir isso como True corrige o comportamento de seleção estranha, bem como outros comportamentos estranhos que podem ocorrer, como não poder redimensionar uma coluna enquanto a propriedade 'resizable' estiver definida como True .

    
por tectux 11.05.2013 / 19:45
1

Eu não posso dar uma resposta completa, mas queria compartilhá-lo. Se estiver fazendo uma pergunta de programação, sempre inclua um exemplo mínimo de trabalho, para que outros possam executar e testar rapidamente seu código (ha, pun pretendido). Vou ter que instalar rapidamente, criar um projeto rapidamente e alterar o código apenas para ver o que é a sua pergunta e tentar consertá-lo, o que eu não vou fazer.

Dito isto, aqui está um exemplo de trabalho mínimo que se comporta corretamente, então meu palpite é que Quickly faz alguma mágica em algum lugar que substitua esse comportamento.

from gi.repository import Gtk

class TestWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.resize(400, 400)
        self.connect("delete-event", Gtk.main_quit)

        ls = Gtk.ListStore(str)
        ls.append(["Testrow 1"])
        ls.append(["Testrow 2"])
        ls.append(["Testrow 3"])
        tv = Gtk.TreeView(ls)
        tr = Gtk.CellRendererText()
        col = Gtk.TreeViewColumn("Testcolumn", tr, text=0)
        tv.append_column(col)
        sel = tv.get_selection()
        sel.set_mode(Gtk.SelectionMode.MULTIPLE)

        self.add(tv)
        self.show_all()

if __name__ == "__main__":
    app = TestWindow()
    Gtk.main()

Observe que você está usando um modo de seleção de árvores incorreto na sua pergunta, e a correta é Gtk.SelectionMode.MULTIPLE .

    
por Timo 09.05.2013 / 22:52