我正在开展一个手势识别项目.有一个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()
函数的事件,可以在每次触发该事件时检查文件更新...任何帮助将不胜感激.
不确定我是否理解正确,但我希望你想要做的是在你的主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!
归档时间: |
|
查看次数: |
854 次 |
最近记录: |