Frage

Betrachten Sie dieses Python-Programm, das PyGtk und Hippo Canvas verwendet eine anklickbare Textbeschriftung angezeigt werden soll. Ein Klick auf das Text-Label ersetzt es mit einem Hippo CanvasEntry Widget, das den Text des Etiketts enthält.

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()

Wie kann die CanvasEntry erstellt, wenn die Textbeschriftung automatisch bei der Erstellung fokussiert geklickt wird werden?

War es hilfreich?

Lösung

Unter dem CanvasEntry, gibt es eine regelmäßige alte gtk.Entry, die Sie brauchen, um den Fokus zu beantragen, sobald sie sichtbar gemacht hat. Hier ist eine modifizierte Version Ihrer textClicked Funktion, die genau das tut:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top