2013-01-14 37 views
5

Có cách nào để tôi có thể nhận được matplotlib để chặn thực thi mã đang chờ xử lý số matplotlib.backend_bases.Event không?matplotlib: cố tình chặn thực thi mã đang chờ xử lý sự kiện

Tôi đã làm việc trên một số lớp để tương tác vẽ các đường và đa giác bên trong các số liệu matplotlib, theo sau these examples. Điều tôi thực sự muốn làm là chặn thực thi cho đến khi tôi chỉnh sửa xong đa giác, sau đó lấy vị trí cuối cùng của các đỉnh - nếu bạn quen thuộc với MATLAB, về cơ bản tôi đang cố gắng sao chép cú pháp position = wait(roihandle), ví dụ here.

Tôi cho rằng tôi có thể đặt thuộc tính lớp đối tượng đa giác tương tác khi nhấn phím, sau đó liên tục thăm dò ý kiến ​​đối tượng trong tập lệnh của tôi để xem sự kiện đã xảy ra chưa, nhưng tôi hy vọng sẽ có một cách đẹp hơn.

Trả lời

5

Vâng, điều đó dễ hơn tôi tưởng! Đối với những người quan tâm, tôi đã tìm thấy giải pháp sử dụng figure.canvas.start_event_loop()figure.canvas.stop_event_loop().

Dưới đây là một ví dụ đơn giản:

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

bạn nên chấp nhận câu trả lời của riêng bạn. – tacaswell

+0

Tôi đồng ý, nhưng tôi phải đợi 2 ngày trước khi có thể –

Các vấn đề liên quan