2011-04-14 43 views
1

我用pyGTK創建了一個滾動窗口。當我在滾動窗口中鍵入一些文本時,必須將該鍵入的文本寫入文件中。我有一個可以寫入文件的函數。但是當我在滾動窗口中輸入一些文本時,必須調用該函數。如果有人向我推薦那種非常有用的解決方案。通過滾動窗口讀取輸入文本?

回答

0
import glib, gtk 

saveFilePath = 'textview.txt' 

isChanged = True 

def onBufferChanged(b): 
    global isChanged 
    isChanged = True 

def onTimeout(): 
    if isChanged: 
     text = textbuff.get_text(textbuff.get_start_iter(), textbuff.get_end_iter()) 
     open(saveFilePath, 'w').write(text) 
     isChanged = False 
    return True ## Continue loop 

textview = gtk.TextView() 
textbuff = textview.get_buffer() 
textbuff.connect('changed', onBufferChanged) 
glib.timeout_add_seconds(1, onTimeout) 

dialog = gtk.Dialog() 
dialog.vbox.pack_start(textview, 1, 1) 
dialog.vbox.show_all() 
dialog.run() 
0

你應該訂閱改變文本區域的事件,你鍵入文本,然後安排和執行功能,將文本保存到文件說每1秒,所以當你輸入你的文本會自動保存。或者你可以有一個後臺線程來監視那個控制器的狀態,並以1秒的延遲定時保存它,這樣。我認爲線程方式更正確

+0

我不認爲線程的方式是最簡單的。最簡單的方法是使用'glib.timeout_add_seconds()'定期調用寫函數。 – ptomato 2011-04-14 08:47:58

+0

是的,但這會給你很多後續的寫入用戶類型的每個字符,因此你必須過濾條件什麼時候寫和什麼時候不寫,但是最好有一個單獨的線程寫1秒的過程延遲執行,如果需要寫入任何內容,將會改變 – Troydm 2011-04-14 08:58:54

+0

,那麼你應該在'GtkTextBuffer''''' changed'處理程序中將e'is_changed'標誌設置爲True。並在'timeout_add_seconds'處理程序中檢查此標誌,如果它爲True,則寫入文件並將其設置爲False,否則不執行任何操作。 – saeedgnu 2011-04-17 11:25:25