2017-03-21 6 views
0

もっと楽しく:on_releaseイベントが四角形パッチ(固定幅)を使って登録された後に値を渡そうとしています。長方形パッチからの戻り値の使用

希望するテスト関数print_meに値を渡すことができないことを除いて、すべてが必要に応じて動作しています(私が何か完全に無意味なことをしない限り)。

また、on_releaseの後にY頂点でテキストを使用して値を設定しようとしていますが、もう一度、運がありません。

理想的には、2線式の水平線が必要ですが、これはうまくいくと思います。

私のテストコードは次のとおりです。

# from http://stackoverflow.com/questions/12052379/matplotlib-draw-a-selection-area-in-the-shape-of-a-rectangle-with-the-mouse 
import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 

class Annotate(object): 
    def __init__(self): 
     self.ax = plt.gca() 
     self.rect = Rectangle((0,0), 1000, 1, alpha=.5, ec="gray", fc="w", zorder=1) 
     print(self.rect) 
     self.x0 = None 
     self.y0 = None 
     self.x1 = None 
     self.y1 = None 
     self.ax.add_patch(self.rect) 
     self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press) 
     self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release) 

    def on_press(self, event): 
     print ('press') 
     self.x0 = event.xdata 
     self.y0 = event.ydata 

    def on_release(self, event): 
     print ('release') 
     #self.x1 = event.xdata 
     self.y1 = event.ydata 
     print(self.y0) 
     print(self.y1) 
     self.rect.set_width(50000) 
     self.rect.set_height(self.y1 - self.y0) 
     self.rect.set_xy((-10, self.y0)) 
     self.text.set_text(str(self.y0)) 
     self.text.set_position((self.get_path())) 
     self.ax.figure.canvas.draw() 
     print_me(str(self.y1)) 

a = Annotate() 
plt.show() 

def print_me(v): 
    print('Yo!') 
    print(v) 

答えて

2
  1. あなたは別の何かでそれを置き換える、それに注釈クラスが何のメソッドget_pathを持っていない
  2. を使用したい場合はself.textを定義する必要があります。
  3. クラス内で使用する場合は、クラスの上にprint_me関数を定義する必要があります。

全作業コード:

import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 

def print_me(v): 
    print('Yo!') 
    print(v) 

class Annotate(object): 
    def __init__(self): 
     self.ax = plt.gca() 
     self.rect = Rectangle((0,0), 1000, 1, alpha=.5, ec="gray", fc="w", zorder=1) 
     self.text = self.ax.text(1,1,"") 

     print(self.rect) 
     self.x0 = None 
     self.y0 = None 
     self.x1 = None 
     self.y1 = None 
     self.ax.add_patch(self.rect) 
     self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press) 
     self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release) 

    def on_press(self, event): 
     print ('press') 
     self.x0 = event.xdata 
     self.y0 = event.ydata 

    def on_release(self, event): 
     print ('release') 
     #self.x1 = event.xdata 
     self.y1 = event.ydata 
     print(self.y0) 
     print(self.y1) 
     self.rect.set_width(50000) 
     self.rect.set_height(self.y1 - self.y0) 
     self.rect.set_xy((-10, self.y0)) 
     self.text.set_text(str(self.y0)) 
     self.text.set_position((0, self.y0)) 
     self.ax.figure.canvas.draw() 
     print_me(str(self.y1)) 

a = Annotate() 
plt.show() 
+0

ハ!私はそれが何か明白であることを知っていた。いつものように、ありがとう! –

関連する問題