2016-08-10 27 views
1

ユーザに入力座標を入力するように指示する関数get_coordsを書くとします。これを行う1つの方法は次のようになります:コマンドラインプロンプトではなく、Matplotlib GUIを使用してユーザ入力を促す方法

def get_coords(): 
    coords_string = input("What are your coordinates? (x,y)") 
    coords = tuple(coords_string) 
    return coords 

しかし、これはコマンドラインではなくGUIを使用して使いたいと思います。 input機能がユーザ入力を待機するので、私はcoords = get_coords()を使用する場合とは異なり、空であるcoords変数にcoords = get_coords_from_figure()結果を使用して、しかし

def onclick(event): 
    return (event.x, event.y) 

def get_coords_from_figure(): 
    fig = plt.figure() 
    plt.axvline(x=0.5)  # Placeholder data 
    plt.show(block=False) 
    cid = fig.canvas.mpl_connect('button_press_event', onclick) 

:私は、次の試してみました。

GUIを使用してユーザーに入力を促すにはどうすればよいですか?

+0

onclickの内側に印刷物を置くと、その印刷物が印刷されますか? – pathoren

答えて

1
import matplotlib.pyplot as plt 

def get_coords_from_figure(): 
    ev = None 
    def onclick(event): 
     nonlocal ev 
     ev = event 

    fig, ax = plt.subplots() 
    ax.axvline(x=0.5)  # Placeholder data 
    cid = fig.canvas.mpl_connect('button_press_event', onclick) 

    plt.show(block=True) 
    return (ev.xdata, ev.ydata) if ev is not None else None 
    # return (ev.x, ev.y) if ev is not None else None 

あなたの実際の機能を返す必要があります。

この関数を返す必要がある場合は、オブジェクトの状態を変更するメンバーメソッドとしてon_clickのクラスを定義し、その場所を知る必要があるときにオブジェクトを参照します。

+0

唯一のことは、 'nonlocal'キーワードはPython 3でのみ利用可能であるということです。この作品をPython 2でどうやって作るのですか? –

関連する問題