Focalizzare programmaticamente un ippopotamo.CanvasEntry?
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?
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