Programando el enfoque de un hipopótamo.
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?
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