如何在gtk/python程序中创建一个额外的无限循环?

Nit*_*nAb 0 python gtk pygtk

新的,我知道当你调用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()
Run Code Online (Sandbox Code Playgroud)

jco*_*ado 5

同时只存在一个主循环gtk,即gtk.main进入一个新的水平gtk.main_quit并存在于该水平.

通常,您需要做的是创建工作线程,它保持并行工作并在获取新信息时更新窗口小部件.但是,根据您描述的问题,我认为您只需要监视文件的更改,gio如下所示:

monitor = gio.File(filename).monitor()
monitor.connect('changed', file_changed_cb)
Run Code Online (Sandbox Code Playgroud)

每当文件改变时,将发出信号并且file_changed_cb将执行回调方法.在那里,您可以更新小部件以匹配正在监视的文件中的新信息.但请注意,如果您的回调方法需要很长时间才能完成,那么您的应用程序可能看起来没有响应,那么您必须采用线程策略.