我有一个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
答案 0 :(得分:3)
以下是发生的事情:
用户按下回车键,您的代码正在运行。然后小部件再次接管,并按下Return
时执行的操作,即将光标移动到下一行。
但是如果您将命令绑定到密钥 release 事件,
self.textview.connect("key_release_event", self.on_key_press_event)
然后在将光标移动到下一行之后执行代码,因此只需清除缓冲区并将光标移动到其开始位置所需的set_text("")
。 / p>