Je développe une application utilisant Quickly. J'ai un Gtk.TreeView avec un Gtk.ListStore comme modèle. Le mode de sélection de Gtk.SelectionMode est défini sur Gtk.SelectionMode.MULTIPLE.
Le problème est que le Gtk.SelectionMode ne se comporte pas comme il se doit:
Le problème peut être facilement reproduit en créant une nouvelle application Ubuntu à l'aide de Quickly (ou vous pouvez télécharger une application de test ci-dessous).
$ quickly create ubuntu-application test
$ cd test
$ quickly design
Créez un TreeView avec un ListStore comme modèle. Réglez le mode de GtkTreeSelection sur "Multiple". Ajoutez des colonnes et des valeurs au ListStore. Ajoutez des TreeViewColumns avec CellRendererTexts à l'arborescence.
$ quickly run -v
Notez que vous ne pouvez pas sélectionner plusieurs lignes.
J'ai déjà essayé certaines choses, mais je n'ai rien changé:
Réglage du mode de sélection dans le code.
self.ui.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
ou
self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
Déplacement de GtkTreeSelection <child>
Sous GtkTreeViewColumn <child>
Dans le fichier d'interface utilisateur.
Suppression de GtkTreeSelection du fichier UI et définition de la sélection avec
self.ui.treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
Suis-je en train d'oublier quelque chose d'évident? Ou cela pourrait-il être un bug?
Sur une note latérale, si vous définissez la sélection sur 'Single', il n'est également pas possible de désélectionner la ligne.
MODIFIER
Si vous souhaitez m'aider, vous pouvez télécharger une application de test ici au lieu de créer un nouveau projet avec Quickly par vous-même. Veuillez noter que vous avez besoin de l'exécuter rapidement.
$ cd test
$ quickly run
J'ai implémenté des rappels à des fins de test dans test/test/TestWindow.py. Vous pouvez trouver la définition de l'interface utilisateur dans test/data/ui/TestWindow.ui.
J'ai trouvé la solution à mon propre problème.
La propriété 'can-focus'
de Gtk.TreeView est définie par défaut sur False
. La définition de True
corrige le comportement de sélection étrange, ainsi que d'autres comportements étranges qui peuvent se produire, comme ne pas pouvoir redimensionner une colonne alors que sa propriété 'resizable'
Est définie sur True
.
Je ne peux pas donner une réponse complète, mais je voulais la partager. Si vous posez une question de programmation, incluez toujours un exemple de travail minimal afin que les autres puissent rapidement (ha, jeu de mots voulu) s'exécuter et tester dans votre code. Je vais devoir installer Quickly, créer un projet Quickly et changer le code juste pour voir de quoi parle votre question et essayer de la corriger, ce que je ne ferai pas.
Cela étant dit, voici un exemple de travail minimal qui se comporte correctement, donc je suppose que Quickly fait quelque part de la magie quelque part qui remplace ce comportement.
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 __== "__main__":
app = TestWindow()
Gtk.main()
Notez que vous utilisez un mode de sélection d'arbre incorrect dans votre question, le bon est Gtk.SelectionMode.MULTIPLE
.