【问题标题】:Pygtk TextView setting cursor at the beginningPygtk TextView 在开头设置光标
【发布时间】:2011-08-26 18:42:48
【问题描述】:

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

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

提前致谢,

诺尔希安

【问题讨论】:

  • 在我的帖子开头有一个大家好,但我不知道为什么它不会出现,我尝试编辑我的帖子 8 次,但是单独你好或大家好被删除: (
  • 那是因为这不是论坛;更像是一个 wiki,有人可以随时编辑您的问题。这使得很难将问题视为来自一个人的信息。所以不鼓励打招呼。 meta.stackexchange.com/questions/2950/…

标签: python textview pygtk cursor-position


【解决方案1】:

这是正在发生的事情:

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

但是如果你把你的命令绑定到关键的release事件上,

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

然后您的代码在光标移动到下一行之后执行,因此只需set_text("") 即可清除缓冲区并将光标移至其开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2021-11-17
    • 2016-06-27
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多