2017-08-23 70 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 
相關問題