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

2024-05-16 14:44:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道程序应该在你调用时进入一个无限循环gtk.main公司. 环路gtk.main公司什么时候会破裂自我退出被称为。在

但我需要另一个活动的循环,它将检查日志文件中的更改,并不断更新这些更改文本缓冲区,将显示在gtk文本框. 所以我可以在下面的代码中添加这个循环。在

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()

Tags: selfgtkgetobjectmainondefdisplay
1条回答
网友
1楼 · 发布于 2024-05-16 14:44:38

gtk中同时只存在一个主循环,即gtk.main进入一个新的级别,gtk.main_quit从该级别存在。在

通常,您需要做的是一个createworker线程,它保持并行工作,并在获得新信息时更新小部件。但是,根据您描述的问题,我认为您只需要使用gio监视文件的更改,如下所示:

monitor = gio.File(filename).monitor()
monitor.connect('changed', file_changed_cb)

每当文件更改时,将发出一个信号并执行file_changed_cb回调方法。在那里,您可以更新小部件以匹配所监视文件中的新信息。但是,请注意,如果您的回调方法花费太长时间来完成,那么您的应用程序可能看起来没有响应,那么您必须使用线程策略。在

相关问题 更多 >