2012-12-07 3 views
1

Je veux emballer un Gtk.Entry (avec Gtk.EntryCompletion branché) dans une cellule dans un Gtk.TreeView. Est-ce que quelqu'un sait comment cela peut être fait? (Je dois juste la fin d'entrée sur une entrée de texte dans une vue tableau.)Gtk.Entry dans Gtk.TreeView (CellRenderer)

Ai-je besoin peut-être sous-classe Gtk.CellRenderer ou Gtk.CellRendererText, et remplacer la méthode start_editing (ou similaire)? Je peux trouver des exemples de sous-classes Gtk.CellRenderer, mais ne modifie pas le comportement modifiable. Je ne trouve pas non plus le code source de la classe Gtk.CellRendererText. J'utilise Gobject Introspection (c'est-à-dire from gi.repository import Gio, Gtk, GLib, Gdk).

Répondre

3

Bon, j'ai finalement trouvé comment faire ça.

class CellRendererAutoComplete(Gtk.CellRendererText): 

    """ Text entry cell which accepts a Gtk.EntryCompletion object """ 

    __gtype_name__ = 'CellRendererAutoComplete' 

    def __init__(self, completion): 
     self.completion = completion 
     Gtk.CellRendererText.__init__(self) 

    def do_start_editing(
       self, event, treeview, path, background_area, cell_area, flags): 
     if not self.get_property('editable'): 
      return 
     entry = Gtk.Entry() 
     entry.set_completion(self.completion) 
     entry.connect('editing-done', self.editing_done, path) 
     entry.show() 
     entry.grab_focus() 
     return entry 

    def editing_done(self, entry, path): 
     self.emit('edited', path, entry.get_text()) 

Inspiration dervied du PyGTK FAQ, et adapté pour pygobject.

1

Vous ne devriez pas avoir à sous-classer, GTK + exige rarement cela. Cela pourrait être plus pratique en Python (qu'en C) bien sûr, si c'est le cas, ça devrait aller.

This page montre comment activer la modification en définissant la propriété editable sur TRUE.

Vous pouvez utiliser gtk_tree_view_set_cursor() pour déplacer le curseur dans une cellule et également commencer à modifier par programmation.

+1

merci, mais je suis au courant de tout cela et cela ne répond pas du tout à ma question. J'ai besoin d'intercepter ou de surcharger l'événement 'on_edit' pour que je puisse modifier le comportement, pour accrocher le' Gtk.Entry' avec la complétion ou le remplacer par mon propre, terminé. – simon

+0

J'ai trouvé ce que je cherchais ce matin (voir ma réponse). Je pense que c'était une nuit de sommeil qui a aidé, autant que n'importe quoi, mais +1 pour vous de poster quelque chose qui m'a fait recommencer à penser à ce sujet ce matin :) merci! – simon

+0

Je ne pense pas que vous seriez en mesure d'aider avec mon [autre problème] (http://stackoverflow.com/questions/13736695/unpacking-gvariant-in-javascript), voulez-vous? – simon

Questions connexes