Programmatische Fokussieren eines hippo.CanvasEntry?
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?
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