2 votes

Mettre au point de manière programmatique un hippo.CanvasEntry ?

Considérons ce programme Python qui utilise PyGtk et Hippo Canvas pour afficher une étiquette de texte cliquable. En cliquant sur l'étiquette de texte, on la remplace par un widget Hippo CanvasEntry qui contient le texte de l'étiquette.

import pygtk
pygtk.require('2.0')
import gtk, hippo

def textClicked(text, event, row):
    input = hippo.CanvasEntry()
    input.set_property('text', text.get_property('text'))
    parent = text.get_parent()
    parent.insert_after(input, text)
    parent.remove(text)

def main():
    canvas = hippo.Canvas()
    root = hippo.CanvasBox()
    canvas.set_root(root)

    text = hippo.CanvasText(text=u'Some text')
    text.connect('button-press-event', textClicked, text)
    root.append(text)

    window = gtk.Window()
    window.connect('destroy', lambda ignored: gtk.main_quit())
    window.add(canvas)

    canvas.show()
    window.show()

    gtk.main()

if __name__ == '__main__':
    main()

Comment l'entrée CanvasEntry créée lorsque l'on clique sur l'étiquette de texte peut-elle être automatiquement mise au point au moment de la création ?

2voto

Glyph Points 17756

Sous le CanvasEntry , il y a un bon vieux gtk.Entry qui doit demander le focus dès qu'il est rendu visible. Voici une version modifiée de votre textClicked qui fait exactement cela :

def textClicked(text, event, row):
    input = hippo.CanvasEntry()
    input.set_property('text', text.get_property('text'))
    entry = input.get_property("widget")
    def grabit(widget):
        entry.grab_focus()
    entry.connect("realize", grabit)
    parent = text.get_parent()
    parent.insert_after(input, text)
    parent.remove(text)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X