簡體   English   中英

如何在gtk / python程序中創建一個額外的無限循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM