मैंने show()
के साथ इस समस्या में बार-बार भाग लिया है, और मुझे यकीन है कि मैं कुछ गलत कर रहा हूं लेकिन मुझे जो भी करना है, उसे करने के लिए 'सही' तरीका सुनिश्चित नहीं है।(पायथन) matplotlib pyplot show() .. अवरुद्ध या नहीं?
और [मुझे लगता है कि] क्या मैं चाहता हूँ मुख्य थ्रेड में ब्लॉक करने के लिए जब तक एक घटना जीयूआई धागा में क्या होता है किसी तरह है, कुछ इस तरह पहली बार काम करता है:
from matplotlib import pyplot as p
from scipy import rand
im = (255*rand(480,640)).astype('uint8')
fig = p.figure()
ax = fig.add_subplot(111)
ax.imshow(im)
# just any mutable container for storing a click
s = [-1, -1]
def onclick(event):
if event.xdata is not None and event.ydata is not None:
s[0] = event.xdata
s[1] = event.ydata
p.close()
cid = fig.canvas.mpl_connect('button_press_event', onclick)
p.show()
print s
p.show()
ब्लॉक जब तक p.close()
इवेंट हैंडलर में बुलाया जाता है। लेकिन दूसरी बार एक ही कोड चलाते समय, यह p.show()
से पहले दौड़ता है और मूल s, [-1, -1]
प्रिंट करता है।
मैंने p.show()
पर एक ही प्रोग्राम से एक से अधिक बार कॉल किया जा सकता है या नहीं, इस पर विवादित जानकारी पढ़ी है। ऐसा लगता है कि इसे एक बार इस्तेमाल करने के लिए डिज़ाइन किया गया था, और केवल एक बार स्क्रिप्ट के अंत में। अन्य उपयोग के मामले किसी भी तरह से pyplot
तोड़ने लगते हैं (राज्य मशीन?)।
मैं p.draw()
और p.ion()
और p.ioff()
के संयोजन का उपयोग करने की कोशिश की है, लेकिन व्यवहार मैं चाहता था नहीं मिल सका (या तो चीजें ठीक से अवरुद्ध नहीं कर रहे थे या भूखंडों सही समय पर नहीं दिखाई दे रहा थे)।
मैं भी कैसे ईवेंट हैंडलर में सब यहाँ s
देखने के लिए सक्षम है के बारे में उलझन में हूँ, और यह है कि क्या इन/आउट जानकारी गुजरने वाले एक गरीब तरीका है। यदि मैं एक सरणी या सूची जैसे एक परिवर्तनीय कंटेनर का उपयोग नहीं करता हूं, तो जो ईवेंट मैं ईवेंट हैंडलर द्वारा सेट करना चाहता हूं, वह स्थानीय चर के रूप में खो जाता है। क्या कोई और तरीका है जिसे मैं याद कर रहा हूं, जहां जीयूआई थ्रेड मुख्य धागे पर सिग्नल पास कर सकता है? जारी रखने से पहले घटना हैंडलर से संकेत के लिए, आवधिक मतदान या व्यस्त प्रतीक्षा के बिना, मुख्य रूप से अवरुद्ध करने का कोई तरीका है?
तो मुझे लगता है कि अंत में मेरी मुख्य सवाल यह है:
वहाँ p.show()
के लिए एक साफ प्रतिस्थापन, करता है कि मैं क्या चाहते है (p.show()
रूप में एक ही व्यवहार पहली बार है), या कोड के इस प्रकार एक की आवश्यकता होती है पूर्ण पुनर्विचार/पुनः लिखना? अलग-अलग गुणवत्ता की
आपके विचारों के लिए धन्यवाद। मैं स्रोत से एमपीएल बनाकर शो() के अवरुद्ध व्यवहार को बदलने में सक्षम था। – wim