2013-01-14 12 views
5

लंबित ब्लॉक करें क्या कोई तरीका है कि मैं matplotlib.backend_bases.Event लंबित कोड निष्पादन को अवरोधित करने के लिए matplotlib प्राप्त कर सकता हूं?matplotlib: जानबूझकर कोड निष्पादन को एक GUI ईवेंट

मैं these examples के बाद, matplotlib आंकड़ों के अंदर अंतःक्रियात्मक रेखाओं और बहुभुजों को चित्रित करने के लिए कुछ कक्षाओं पर काम कर रहा हूं। जो मैं वास्तव में करना चाहता हूं वह ब्लॉक निष्पादन है जब तक कि मैं अपने बहुभुज को संपादित नहीं कर लेता हूं, फिर शीर्षकों की अंतिम स्थिति प्राप्त करें - यदि आप MATLAB से परिचित हैं, तो मैं मूल रूप से position = wait(roihandle) वाक्यविन्यास को दोहराने की कोशिश कर रहा हूं, उदाहरण के लिए here

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

उत्तर

5

अच्छा, यह सोचा था कि यह आसान होगा! रुचि रखने वालों के लिए मुझे figure.canvas.start_event_loop() और figure.canvas.stop_event_loop() का उपयोग करके समाधान मिला।

from matplotlib import pyplot as plt 

class FigEventLoopDemo(object): 

    def __init__(self): 

     self.fig, self.ax = plt.subplots(1, 1, num='Event loop demo') 
     self.clickme = self.ax.text(0.5, 0.5, 'click me', 
            ha='center', va='center', 
            color='r', fontsize=20, picker=10) 

     # add a callback that triggers when the text is clicked 
     self.cid = self.fig.canvas.mpl_connect('pick_event', self.on_pick) 

     # start a blocking event loop 
     print("entering a blocking loop") 
     self.fig.canvas.start_event_loop(timeout=-1) 

    def on_pick(self, event): 

     if event.artist is self.clickme: 

      # exit the blocking event loop 
      self.fig.canvas.stop_event_loop() 
      print("now we're unblocked") 
+0

आप अपने खुद के जवाब को स्वीकार करना चाहिए:

यहाँ एक सरल उदाहरण है। – tacaswell

+0

मैं सहमत हूं, लेकिन मुझे 2 दिन पहले इंतजार करना होगा –

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