新的,我知道当你调用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()
答案 0 :(得分:5)
gtk
同时只存在一个主循环,即gtk.main
进入新级别,gtk.main_quit
存在于该级别。
通常,您需要做的是创建工作线程,它保持并行工作并在获取新信息时更新窗口小部件。但是,根据您描述的问题,我认为您只需要使用gio
监控文件以进行更改,如下所示:
monitor = gio.File(filename).monitor()
monitor.connect('changed', file_changed_cb)
每当文件发生变化时,都会发出信号并执行file_changed_cb
回调方法。在那里,您可以更新小部件以匹配正在监视的文件中的新信息。但请注意,如果您的回调方法需要很长时间才能完成,那么您的应用程序可能看起来没有响应,那么您必须采用线程策略。