2012-11-11 36 views
6

我想在python中顯示圖像,並在用戶在終端輸入圖像名稱後關閉它。我用PIL來顯示圖像,這裏是代碼:如何在python中顯示和關閉圖像?

im = Image.open("image.jpg") 
im.show() 

我的應用程序顯示此圖像,但用戶的任務是認識上的圖像對象和終端寫答案。如果輸入的答案是正確的,用戶應該得到另一張圖片PIL的問題在於我無法關閉圖像,並且研究唯一的解決方案是殺死圖像查看器的過程,但這並不真正可靠和優雅。 是否有任何其他庫用於顯示具有像.show()和.close()方法的圖像?

回答

2

只需在單獨的進程中打開任何圖像查看器/編輯器,並在用戶回答您的問題後終止它,例如

from PIL import Image 
import subprocess 

p = subprocess.Popen(["display", "/tmp/test.png"]) 
raw_input("Give a name for image:") 
p.kill() 
+2

這是否依賴「display」作爲一個可執行文件,在用戶的路徑上顯示圖像?這似乎有點......脆弱? – GreenAsJade

+0

這是一個例子,但軟件必須依靠某些東西來工作,這對於給定情況來說是最簡單的方式,通常對於跨平臺應用程序,您可能會使用像wxPython或PyQT這樣的庫來創建窗口和顯示圖像。你也可以使用PIL的'im.show',它可能是跨平臺的,但你不能自動關閉窗口。 –

2

終端旨在處理線性命令流 - 意味着它會提出一個問題,用戶的答案,然後它可以提出一個不同的問題。你在這裏要做的是讓終端做兩件事,展示一張圖片,同時向用戶提出一個問題。要做到這一點,你可以做兩任件事:

多重

你可以開始一個新的線程/進程,使用線程使PIL顯示圖像,同時在第一個線程/進程問用戶提出問題。然後在用戶回答後,您可以關閉另一個線程/進程。你可以看看Python的threading模塊(link)瞭解更多關於你如何做到這一點的信息。

GUI

,而不是使您的用戶界面在終端,讓您使用舒適無論框架一個簡單的GUI應用程序。我個人喜歡PyQt4。 Qt是非常強大的GUI開發工具包,PyQt4是它的一個包裝。如果你製作一個圖形用戶界面,那麼你打算做的事情是相當微不足道的。

0

可能是矯枉過正,但對我來說最簡單,最可靠的解決方案只是使用matplotlib,因爲它正確地保存了其創建的數字,例如軌道:

import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

imgplot = plt.imshow(mpimg.imread('animal.png')) 
plt.ion() 
plt.show() 
animal_name = raw_input("What is the name?: ") 
plt.close() 
+0

在Jupyter筆記本上嘗試過,圖像似乎並沒有關閉。 Python閒置時,圖片也沒有關閉。當我用IDLE運行它後手動嘗試關閉它時,它只是凍結並崩潰。 – Moondra

+0

我已經在Ubuntu和Mac OS上用普通的python 2&3試過了,它工作正常 - 我不知道有關Jupyter等框架的具體情況。 –