2008-10-01 46 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,您需要在可见时立即请求焦点。以下是您的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) 
相关问题