2012-11-11 11 views
6

मैं पाइथन में छवि प्रदर्शित करना चाहता हूं और उपयोगकर्ता को टर्मिनल में छवि के नाम दर्ज करने के बाद इसे बंद करना चाहता हूं। मैं जनहित याचिका का उपयोग छवि प्रदर्शित करने के लिए, यहाँ कोड है:पायथन में छवि को प्रदर्शित और बंद कैसे करें?

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

मेरा आवेदन प्रदर्शन इस छवि है, लेकिन उपयोगकर्ता कार्य छवि पर वस्तु समझते हैं और टर्मिनल में जवाब लिखने के लिए है। यदि दर्ज किया गया जवाब सही है तो उपयोगकर्ता को एक और छवि मिलनी चाहिए। पीआईएल के साथ समस्या यह है कि मैं छवि को बंद नहीं कर सकता और अनुसंधान के साथ ही छवि दर्शक की प्रक्रिया को मारना था, लेकिन यह वास्तव में विश्वसनीय और सुरुचिपूर्ण नहीं है। क्या छवियों को प्रदर्शित करने के लिए कोई अन्य पुस्तकालय हैं जिनमें .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

क्या यह "प्रदर्शन" पर निर्भर करता है जो निष्पादन योग्य होता है जो उपयोगकर्ता के पथ पर एक छवि प्रदर्शित करता है? यह थोड़ा सा लगता है ... नाजुक? – GreenAsJade

+0

यह एक उदाहरण है, लेकिन सॉफ़्टवेयर को काम करने के लिए कुछ भरोसा करना है, यह किसी दिए गए परिस्थिति के लिए सबसे आसान तरीका है, सामान्य रूप से क्रॉस प्लेटफ़ॉर्म ऐप के लिए आप कुछ लाइब्रेरी जैसे WxPython या PyQT का उपयोग विंडो और डिस्प्ले छवि बनाने के लिए कर सकते हैं। आप पीआईएल के 'im.show' का भी उपयोग कर सकते हैं जो क्रॉस प्लेटफार्म हो सकता है लेकिन आप विंडो को स्वचालित रूप से बंद नहीं कर सकते हैं। –

2

टर्मिनल रैखिक कमांड प्रवाह से निपटने के लिए है - जिसका अर्थ है कि यह एक प्रश्न पूछता है, उपयोगकर्ता उत्तर देता है, और फिर यह एक अलग सवाल पूछ सकता है। आप यहां क्या करने की कोशिश कर रहे हैं टर्मिनल के लिए दो चीजें करने के लिए, एक छवि दिखाएं और साथ ही उपयोगकर्ता से एक प्रश्न पूछें। ऐसा करने के लिए आप या तो चीजों की दो कर सकते हैं:

Multiprocessing

आप एक नया धागा/प्रक्रिया शुरू करने और उस सूत्र का उपयोग कर जनहित याचिका छवि प्रदर्शित कर सकते हैं और इस बीच पहले धागा/प्रक्रिया में एक पूछना उपयोगकर्ता एक सवाल है। फिर उपयोगकर्ता उत्तर देने के बाद, आप अन्य थ्रेड/प्रक्रिया को बंद कर सकते हैं। आप यह कैसे कर सकते हैं इसके बारे में अधिक जानकारी के लिए आप पाइथन के threading मॉड्यूल (link) पर एक नज़र डाल सकते हैं।

जीयूआई

के बजाय टर्मिनल में अपने यूजर इंटरफेस बनाने, का उपयोग कर जो भी ढांचा आप सहज महसूस कर रहे एक सरल जीयूआई आवेदन कर सकते हैं। मुझे व्यक्तिगत रूप से PyQt4 पसंद है। क्यूटी बहुत शक्तिशाली जीयूआई विकास टूलकिट है और पीईक्यूटी 4 इसके लिए एक रैपर है। यदि आप एक जीयूआई बनाते हैं, तो आप जो करना चाहते हैं वह बदतर है।

0

एक overkill हो सकता है, लेकिन मेरे लिए सबसे आसान और सबसे मजबूत समाधान 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

जुपीटर नोटबुक पर कोशिश की, और छवि बंद नहीं लगती है। पायथन निष्क्रिय के साथ, तस्वीर भी बंद नहीं हुई थी। जब मैंने आईडीएलई के साथ इसे चलाने के बाद मैन्युअल रूप से इसे बंद करने का प्रयास किया, तो यह सिर्फ जम गया और दुर्घटनाग्रस्त हो गया। – Moondra

+0

मैंने उबंटू और मैक ओएस दोनों पर केवल सामान्य पायथन 2 और 3 के साथ कोशिश की है और यह ठीक काम करता है - मुझे ज्यूपिटर जैसे ढांचे के साथ विनिर्देशों के बारे में पता नहीं है। –

संबंधित मुद्दे