التركيز برمجيا hippo.CanvasEntry؟
سؤال
والنظر في هذا البرنامج والذي يستخدم بيثون جتك وفرس النهر قماش لعرض تسمية نص يمكن النقر عليها. بالنقر على تسمية نص يستبدلها مع القطعة فرس النهر CanvasEntry التي تتضمن نص التسمية.
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()
وكيف يمكن خلق CanvasEntry عندما يتم النقر على تسمية نص أن تركز تلقائيا في وقت الخلق؟
المحلول
وتحت CanvasEntry
، وهناك gtk.Entry
القديمة العادية التي تحتاج إلى طلب التركيز في أقرب وقت انها مصنوعة مرئية. وفيما يلي نسخة معدلة من وظيفة textClicked
الخاصة بك والتي يفعل ذلك بالضبط:
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)
لا تنتمي إلى StackOverflow