python - Pygtk TextView 设置光标在开头

标签 python textview pygtk cursor-position

我有一个 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 中,它可以工作,但它真的很脏......

知道如何在没有脏代码的情况下完成这项工作吗?

提前致谢

诺兰

最佳答案

这是正在发生的事情:

用户按下回车键,您的代码正在运行。然后小部件再次接管并执行它在按下 Return 时始终执行的操作,即将光标移动到下一行。

但是如果您将命令绑定(bind)到键release 事件,

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

然后你的代码在光标移动到下一行后执行,所以 set_text("") 是清除缓冲区和移动所需的全部光标到它的开始。

关于python - Pygtk TextView 设置光标在开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209176/

相关文章:

android - 如何从衍生的后台服务访问原始 Activity 的 View

Android TextView 不会扩展以匹配父级

python - 在 Linux 中使用 Python 创建 GUI

python - gtk.treeviewcolumn 不排序

javascript - 如何使用selenium python获取 Canvas 后面的文本

python - 如何制作分区结构

Android Studio 记录器 TextView TypeFace 样式 0

python - pygtk 中的多行 gtk 条目

python - 1241, 'Operand should contain 1 column(s)' Pandas to_sql

Python。取消根目录