2017-04-01 17 views
1

matplotlibのウィジェットを使用してプロットとやりとりするようにthis exampleを調整しています。 私が正常に動作する方法は、対話型で、spyderからです。私はちょうどプロットを行う関数を呼び出します。 私の目標は、Pythonがインストールされていないユーザーに実行可能ファイルを提供することです。そのため、中間ステップとして、スクリプトに関数をラップしています。PythonスクリプトのMatplotlibインタラクティブウィジェット

import various_modules 
def plotting() 
    ... 
    plot_some_initial_stuff 
    sl = Slider() 
    plt.show()    <------- 
    def update() 
     ... 
     ax.set_ydata() 
     fig.canvas.draw_idle() 
    sl.on_change(update) 
    return() 
plotting() 

だから私はただプロット関数を定義し、それを呼び出します。一言で言えば鉱山は、次のようになりますので、中 私は、スタンドアロンスクリプトで、最小限の経験を持っています。 私はそうやって、私はIPythonシェルから働いていたときに持っている必要はありませんplt.show()コマンドを追加する必要がありました:

python my_plot.py 

は何も生成しません。 plt.show()を追加すると、初期化部分で定義したグラフがウィンドウに表示されます。しかし、相互作用は起こらない。

私がやっているようにスクリプトを実行しているときの対話を達成する正しい方法は何ですか?

答えて

0

私はすべての詳細を知らないが、私は、ということを学びました:スクリプトのデフォルトのモードはnon-interactive

  • で、これはshow()が呼び出されるまで、
    • 何のプロットが生成されないことを意味

      • ステートメントの後にスクリプトの実行が進まない

    したがって、show()への私の呼び出しが早すぎたし、実際にupdate関数の定義とslider.on_change()イベントへの接続を遮断しました。

    show()を目的の動作を得るために関数定義の最後の行に移動すれば十分です。

  • 関連する問題