python-开始的Pygtk TextView设置光标

我有一个gtk.TextView(),每次用户在其中放置文本并按回车键时,我都想在终端中打印文本并清除文本区域中的所有内容,因此,将光标放在textview的开头.我试过了 :

self.textbuffer.set_text("")

要么 :

start, end = self.textbuffer.get_bounds()
self.textbuffer.delete(start, end)

但是,这两个代码即使擦除了文本区域中的文本,也不会将光标移回第一行,而是将光标置于第二行.而且,如果我输入更多文本并返回,它总是停留在第二行,我不知道为什么.

好吧,我没有设法做到这一点,所以我暂时使用了一个技巧,这是:

self.textview = gtk.TextView()
self.textbuffer = self.textview.get_buffer()
self.textview.connect("key_press_event", self.on_key_press_event)

和我的self.on_key_press_event:

def on_key_press_event(self,widget, event):
    keyname = gtk.gdk.keyval_name(event.keyval)
    if keyname == "Return":
        self.textbuffer = self.textview.get_buffer()
        startiter, enditer = self.textbuffer.get_bounds()
        print self.textbuffer.get_text(startiter, enditer)
        self.textview.destroy()
        self.textview=gtk.TextView()
        self.sw.add(self.textview)
        self.textview.show()
        self.textview.grab_focus()
        self.textview.connect("key_press_event", self.on_key_press_event)

因此,每当用户点击回车时,我都会从gtk.ScrolledWindow中删除textview,销毁它,创建一个新视图,然后再次将其添加到gtk.ScrolledWindow中,它可以工作,但确实很脏…

我有没有肮脏代码的情况下如何使它工作的任何想法?

提前致谢,

Nolhian

解决方法:

这是正在发生的事情:

用户按下回车键,您的代码正在运行.然后,该小部件将再次接管并执行按Return键时始终执行的操作,这就是将光标移至下一行.

但是,如果您将命令绑定到密钥释放事件,

self.textview.connect("key_release_event", self.on_key_press_event)

然后在光标移至下一行之后执行您的代码,因此只需set_text(“”)即可清除缓冲区并将光标移至其开始处.

上一篇:android-一般访问TextView


下一篇:Android:复合控件中的按钮会干扰ListView的ContextMenu