2008-10-01 8 views
2

PyGtkとHippo Canvasを使ってクリック可能なテキストラベルを表示するこのPythonプログラムを考えてみましょう。テキストラベルをクリックすると、ラベルのテキストを含むHippo CanvasEntryウィジェットに置き換えられます。プログラム的にhippo.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関数の修正バージョン
関連する問題