[英]how to create an extra infinite loop in an gtk/python program?
這是新事物,我知道調用gtk.main時程序應該進入無限循環。 調用self.quit時,gtk.main中的循環將中斷。
但是我需要另一個活動的循環,該循環將檢查日志文件中的更改,並不斷將更改更新到gtk.Textbuffer中,以顯示在gtk.Textbox中。 所以我可以在下面的代碼中添加此循環。
class MessageBox:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("mbx.glade")
self.window = builder.get_object("window")
dic = { "on_buttonSend_clicked" : self.sendmsg,
"on_entry_activate" : self.sendmsg,
"on_buttonWhois_clicked" : self.sendwhois,
"on_buttonIdleTime_clicked" : self.sendidletime,
"on_window_destroy" : self.exitfunc}
builder.connect_signals(dic)
self.entry = builder.get_object("entry")
self.display = builder.get_object("display")
self.displaybuff=self.display.get_buffer()
def exitfunc(self, widget):
def sendmsg(self, widget):
def sendwhois (self, widget):
def sendidletime (self, widget):
if __name__ == "__main__":
msgbox = MessageBox()
msgbox.window.show()
gtk.main()
同一時間gtk
中僅存在一個主循環,即gtk.main
進入一個新級別,而gtk.main_quit
從該級別存在。
通常,您需要做的是創建工作線程,該線程保持並行工作並在獲取新信息時更新小部件。 但是,根據您描述的問題,我相信您只需要使用gio
監視文件的更改即可,如下所示:
monitor = gio.File(filename).monitor()
monitor.connect('changed', file_changed_cb)
每當文件更改時,都會發出一個信號,並且將執行file_changed_cb
回調方法。 在那里,您可以更新小部件以匹配被監視文件中的新信息。 但是,請注意,如果您的回調方法花費太長時間才能完成,則您的應用程序可能看起來沒有響應,那么您就必須采用線程策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.