Курсор настройки Pygtk TextView в начале

У меня есть gtk.TextView(), и каждый раз, когда пользователь помещает в него текст и нажимает «Ввод», я хочу напечатать текст в терминале и стереть все в текстовой области, поэтому поместите курсор в начало текстового просмотра. Я пытался :

self.textbuffer.set_text("")

or :

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)

Поэтому каждый раз, когда пользователь нажимает return, я удаляю textview из моего gtk.ScrolledWindow, уничтожаю его, создаю новый и снова добавляю его в свой gtk.ScrolledWindow, он работает, но он действительно грязный...

Любая идея о том, как я могу заставить это работать без этого грязного кода?

Заранее спасибо,

нолийский


person Nolhian    schedule 26.08.2011    source источник
comment
В начале моего поста есть привет всем, но я не знаю, почему он не появляется, я пытался отредактировать свой пост 8 раз, но либо привет в одиночку, либо привет всем удаляются :(   -  person Nolhian    schedule 26.08.2011
comment
Это потому, что это не форум; больше похоже на вики, кто-то может отредактировать ваш вопрос в любое время. Из-за этого трудно думать о вопросе как о сообщении от одного человека; поэтому приветствия не приветствуются. meta.stackexchange.com/questions/2950/   -  person ptomato    schedule 30.08.2011


Ответы (1)


Вот что происходит:

Пользователь нажимает клавишу ввода, и ваш код запускается. Затем виджет снова вступает во владение и делает то, что всегда делает при нажатии Return, то есть перемещает курсор на следующую строку.

Но если вы привяжете свою команду к ключевому событию release,

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

затем ваш код выполняется после перемещения курсора на следующую строку, поэтому set_text("") — это все, что нужно для очистки буфера и перемещения курсора в его начало.

person antonakos    schedule 27.08.2011