2011-08-26 74 views
3

我有一個gtk.TextView(),每當用戶放入文本並打回車時,我想要在終端中打印文本並刪除文本區域中的所有內容,光標在textview的開頭。我想:Pygtk 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,它的工作原理,但它真的很髒...

任何想法如何我c使這個工作沒有那麼髒的代碼?

由於提前,

Nolhian

+0

在我的帖子開頭有個大家好,但我不知道爲什麼它不會出現,我試着編輯我的帖子8次,但無論是單獨你好還是你好,大家都會被刪除:( – Nolhian

+0

這是因爲這個不是一個論壇,更像是一個維基,有人可能隨時編輯你的問題,這使得很難把一個問題想象成一個人的信息,所以,敬酒是不鼓勵的。 COM /問題/ 2950 /應喜感謝,標語和 - 稱呼被移除,從根柱子 – ptomato

回答

3

這裏是正在發生的事情:

用戶按下回車鍵,你的代碼正在運行。然後小部件再次接管並按下Return時的功能,即將光標移動到下一行。

但如果你的命令綁定到關鍵發佈事件,

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

那麼你的代碼後執行將光標移動到下一行,所以set_text("")是所有需要清除緩衝區並將光標移動到其開始位置。