2008-10-01 1 views
2

PyGtk 및 Hippo Canvas를 사용하여 클릭 가능한 텍스트 레이블을 표시하는이 Python 프로그램을 고려하십시오. 텍스트 레이블을 클릭하면 레이블의 텍스트가 들어있는 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 생성 할 수 있습니까?

답변

2

CanvasEntry 아래에는 보통 이전의 gtk.Entry이 있습니다. 초점이 표시되는 즉시 요청해야합니다.

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) 
다음과 같은 기능을 가진 textClicked 함수의 수정 된 버전이 있습니다.
관련 문제