Pregunta

Considere este programa de Python que usa PyGtk y Hippo Canvas para mostrar una etiqueta de texto en la que se puede hacer clic. Al hacer clic en la etiqueta de texto, se reemplaza con un widget Hippo CanvasEntry que contiene el texto de la etiqueta.

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

¿Cómo se puede enfocar automáticamente la creación de CanvasEntry cuando se hace clic en la etiqueta de texto en el momento de la creación?

¿Fue útil?

Solución

Debajo de CanvasEntry , hay un antiguo gtk.Entry normal, en el que debes solicitar el enfoque tan pronto como se haga visible. Aquí hay una versión modificada de su función textClicked que hace precisamente eso:

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top