سؤال

والنظر في هذا البرنامج والذي يستخدم بيثون جتك وفرس النهر قماش لعرض تسمية نص يمكن النقر عليها. بالنقر على تسمية نص يستبدلها مع القطعة فرس النهر 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top