2017-08-23 39 views
0

我正在将应用程序传输到RPi,并且我需要一种方式在代码继续执行时使用python(3)显示全屏图像。我想避免深入到Tkinter和Pygame等复杂的GUI模块。我只是想让图像填满屏幕并留在那里,直到代码替换它们或让它们消失。如果Tkinter或Pygame可以做到这一点,那就没有问题了,但是在我看来,他们都进入了最终需要键盘输入的循环。我的应用程序涉及到监视传感器和外部输入,但不会连接任何键盘。我尝试了以下内容:寻求在RPi上显示图像并继续执行python的简单方法

FEH与subprocess.call激活(这显示图像,但代码将停止执​​行,直到图像是由按键清除

wand.display(这个工作,但只能说明一个很小的窗口,而不是全屏幕)

联邦调查局(不能得到它来显示图像)

XCD-开放(的作品,但在小窗口中的“图像查看器”的应用程序打开 - 全屏别无选择没有鼠标点击)

我没有尝试过OpenCV。似乎可能会有效,但这是为这个简单的应用程序引入的很多基础结构。

为了记录我去过谷歌,并且已经投入了很多时间。此请求是最后的手段。

如果你想要一些伪代码:

displayImage("/image_folder/image1.jpg" fullscreen = True) 
time.sleep(1) 
clearImage() 
displayImage("/image_folder/image2.jpg" fullscreen = True) 

回答

0

你没有表现如何你试着用FEH和子进程,但也许尝试在后台启动它,所以它不会阻止你主线程:

subprocess.call("feh -F yourImage.jpg &", shell=True) 

需要注意的是后台进程,即那些开始&,使用的shell的功能,所以我已经设置shell=True

然后,显示下一个图像之前,杀死前一个实例:

subprocess.call("pkill feh") 

或者,如果你知道你提前计划来显示所有图像的名称,你可以开始FEH“幻灯片模式”(通过传递启动时要在所有图像名称),然后传递信号SIGUSR1要提前图像每次:

os.kill(os.getpid(...), signal.SIGUSR1) 

如果上述方法无效,请点击edit你原来的问题下,并在输出从以下命令添加,所以我们可以去framebuffer的路线:

fbset -fb /dev/fb0 

tvservice -d edid 
edidparser edid 
相关问题