Domanda

Considera questo programma Python che utilizza PyGtk e Hippo Canvas per visualizzare un'etichetta di testo cliccabile. Fare clic sull'etichetta di testo per sostituirla con un widget Hippo CanvasEntry che contiene il testo dell'etichetta.

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

In che modo il CanvasEntry creato quando si fa clic sull'etichetta di testo può essere automaticamente focalizzato al momento della creazione?

È stato utile?

Soluzione

Sotto CanvasEntry , c'è un vecchio gtk.Entry normale che devi richiedere lo stato attivo non appena viene reso visibile. Ecco una versione modificata della tua funzione textClicked che fa proprio questo:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top