连续读取文件并相应地更新Python GTK应用程序

Nis*_*rma 0 python gtk events

我正在开展一个手势识别项目.有一个C程序从视频输入中捕获手势并将其写入文件.现在,我有一个用Python编写的图像查看器--GTK.它根据手势切换到下一个或上一个窗口.此连续文件读取和应用程序更新定义如下:

def ai(self):
        if self.mtime!=os.stat("input.txt").st_mtime:
            self.mtime=os.stat("input.txt").st_mtime
            inp=open("input.txt", "r");
            line=inp.read()
            if len(line)!=0:
                line=line[0:len(line)-1]
                for x in line.split(' '):
                    y=x.split('-')
                    if(y[1]=="R"):
                        self.next()
                        print "Move Right"
                    elif(y[1]=="L"):
                        self.prev()
                        print "Move Left"
        time.sleep(1)
        print "WakeUp"
        self.ai()
Run Code Online (Sandbox Code Playgroud)

现在如果我在这里注释掉递归调用,那么应用程序在读取当前文件和更新图像后工作.当然,之后它不会更新.

但是如果我取消注释递归调用,那么控制台会继续工作,但是图像查看器应用程序会停止响应.

有没有办法执行此功能?任何我可以绑定此ai()函数的事件,可以在每次触发该事件时检查文件更新...任何帮助将不胜感激.

mac*_*mac 6

不确定我是否理解正确,但我希望你想要做的是在你的主GTK循环中安排一个调用ai(),以便你的程序检查常规基础上是否有输入.

如果这是你想要的,你有两个选择:定期调度呼叫或安排程序空闲时的调用(它没有做任何其他事情).

您的代码应该类似于:

gobject.idle_add(callback, ...)  #execute callback when idle
gobject.timeout_add(interval, callback, ...)  #execute callback every interval millisecs
Run Code Online (Sandbox Code Playgroud)

文档应该在这里,但目前存在服务器错误.以下是相关段落:

gobject.idle_add()只要没有更高优先级的事件等待默认主循环,该函数就会添加一个函数(由回调指定).该函数被赋予默认的空闲优先级gobject.PRIORITY_DEFAULT_IDLE.可以在回调后指定传递给回调的其他参数.可以将空闲优先级指定为具有关键字"priority"的关键字 - 值对.如果回调返回FALSE,它将自动从事件源列表中删除,不会再次调用.

gobject.timeout_add()函数设置一个函数(由回调指定)以定期间隔调用(由interval指定,默认优先级为gobject.PRIORITY_DEFAULT.可以在回调后指定传递给回调的附加参数.可以将空闲优先级指定为a带有关键字"priority"的关键字 - 值对.

一个问题:True如果要将它们保留在调度程序中,则需要返回回调,否则将只执行一次.

HTH!