Question

J'ai un widget ComboBox dans Python que j'aimerais pouvoir choisir plusieurs éléments, mais je commence à penser que ce n'est pas possible. Je vois qu'il est possible d'utiliser Gtk.TreeView() En définissant le mode sur plusieurs. Existe-t-il un moyen d'obtenir un Combobox pour le faire? Si non, un TreeView peut-il être placé à l'intérieur d'un ComboBox et si oui, comment (exemple de codage court, s'il vous plaît)? J'utilise GTK3, mais je pourrais probablement le traduire d'un exemple GTK2.

Était-ce utile?

La solution

Après de nombreuses recherches, je pense que c'est simplement une limitation du Combobox qu'il ne peut contenir qu'un seul élément. Donc, la réponse est:

Oui, un ComboBox peut être configuré pour sélectionner plusieurs (s'il contient un TreeView)

Et ainsi,

Oui, un TreeView peut être placé à l'intérieur d'un Combobox.

Mais, il ne se comporte pas correctement car le Combobox agit comme un conteneur avec TreeView toujours visible, pas seulement lors de l'activation du ComboBox. Il peut être défini pour sélectionner plusieurs utilisation gtk.treeselection (GOTten à partir de gtk.treeview.get_selection ()).

Voici le code:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from gi.repository import Gtk

PEOPLE =    [
            "Frank",
            "Martha",
            "Jim Bob",
            "Francis"
            ]

class TreeCombo(object):
    def __init__(self):
        self.win = Gtk.Window(title="Combo with liststore")
        self.win.connect('delete-event', Gtk.main_quit)

        self.store = Gtk.ListStore(str)
        for person in PEOPLE:
            self.store.append([person])

        # self.combo = Gtk.ComboBox.new_with_model(self.store)
        self.combo = Gtk.ComboBox()

        self.tree = Gtk.TreeView(self.store)
        self.selector = self.tree.get_selection()
        self.selector.set_mode(Gtk.SelectionMode.MULTIPLE)

        self.combo_cell_text = Gtk.CellRendererText()

        self.column_text = Gtk.TreeViewColumn("Text", self.combo_cell_text, text=0)

        self.tree.append_column(self.column_text)

        self.combo.add(self.tree)

        self.win.add(self.combo)

        self.win.show_all()




def main():
    prog = TreeCombo()
    Gtk.main()

if __name__ == "__main__":
    main()

Je vais jouer avec la cachette et montrer le TreeView avec l'activation du Combobox. Je vous ferai savoir comment ça se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top