2012-11-26 12 views
18

अंतिम कार्य के अंत में मैं अपने कार्यक्रमों में से एक में कॉल करता हूं, मेरे पास एक साधारण रंग प्लॉट प्लॉट करने के लिए निम्न कोड है।plt.show() टर्मिनल लटका

plt.figure() 
plt.pcolormesh(X,Y,Z) 
plt.colorbar() 
plt.show() 

बाद में मैं मुख्य पर लौटता हूं और मेरा प्रोग्राम पूरा हो जाता है। साजिश अपेक्षित के रूप में प्रदर्शित होती है, हालांकि जब मैं कोने में (बटन) पर एक्स बटन का उपयोग करके इसे बंद करने के लिए जाता हूं, तो मेरा प्रोग्राम समाप्त नहीं होता है। यह सिर्फ एक प्रक्रिया चल रहा है के साथ लटका है। यह कैसे सही हो सकता है?

+0

एक त्वरित और गंदे समाधान 'plt.draw उपयोग करने का प्रयास करने के लिए हो सकता है()' 'बजाय plt.show की()'। 'शो()' सभी इंटरैक्टिव टूल्स लोड करता है, जहां 'ड्रा()' एक साधारण दर्शक होना चाहिए जो आपके शेष कार्यक्रम के साथ अधिक अच्छी तरह से खेल सकता है। – jozzas

+0

इसके अलावा, आप matplotlib का कौन सा संस्करण उपयोग कर रहे हैं? संस्करण 1.0.0 ने जो कुछ करना चाहते हैं उसके साथ इसे अधिक संगत बनाने के लिए 'शो()' में कुछ बदलाव किए हैं। [दस्तावेज़ देखें] (http://matplotlib.org/faq/howto_faq.html#use-show) अधिक जानकारी के लिए। – jozzas

+2

क्या आप ipython, या कुछ अन्य matplotlib अनुकूल कंसोल का उपयोग कर रहे हैं जो GUI थ्रेड को सही तरीके से संभालता है? – DaveP

उत्तर

18

आपकी matplotlib किसी कारण से non-interactive mode में चल रहा है। मुझे यकीन है कि अपने स्थानीय विन्यास में है कि को रोकने के लिए कैसे नहीं कर रहा हूँ, लेकिन यदि आप जोड़ने या तो इस:

plt.ion() 

या इस:

matplotlib.interactive(True) 
अपनी स्क्रिप्ट की शुरुआत में कहीं

, यह व्यवहार बदलना चाहिए अपने भूखंडों का।

1

इंटरैक्टिव मोड के लिए, आप फ़ाइल के सिर पर इस की जरूरत है:

import matplotlib 
matplotlib.use("TkAgg")