2012-10-15 51 views
1

我想知道在用戶輸入時是否有方法從TextBuffer打印輸入。 我試過使用insert_text信號,但它似乎在打印輸入後面的一個字符。獲取文本,因爲用戶正在輸入gtk.TextBuffer

到目前爲止,我

self.__buffer.connect('insert_text', self.__inserted) 
def __inserted(self, widget, iter, string, length): 
    print self.__buffer.get_text(self.__buffer.get_start_iter(),self.__buffer.get_end_iter()) 

上面的代碼打印出的背後實際上正在輸入的內容緩衝區1個字符。

我想要的功能是這樣的:

,如果用戶輸入 「你好」

輸出應該

h    #after h typed 
he    #after he typed 
hel   #etc 
hell 
hello 

目前正在打印

#after h typed 
h    #after he typed 
he   #etc 
hel 
hell 

回答

3

你可能會發現在傳遞的參數中找到了缺失的數據到你的__inserted方法。對象的insert_text信號的默認處理程序似乎是負責將文本插入緩衝區的內容,並且您的信號處理程序將事先運行。

兩種可能的方法來解決此是:

  1. 使用connect_after掛鉤信號處理程序。這將在默認處理程序之後運行。

  2. 如果您只想在每次更改後訪問整個緩衝區的數據值,請考慮使用changed信號。這是在下一個文本插入緩衝區後發出的,並且還會通知您刪除。

+0

謝謝噸:),沒有這不是我真正想做的事情。只是一個簡化版本。 –