windowsとmacがpython tkウィンドウとmatplotlib figure close_eventをどのように扱うのか、本当に面倒な違いに遭遇しました。matplotlib figureはtkアプリケーションの中でトリガーされたcloseイベントの後にプログラムフローを続行しません
私の問題は、私はTkのボタンイベントからmatplotlibのフィギュアをロードしようとしています、これ
- です。
- 図が表示され、 プロットがアクティブな間にtk UIプログラムフローをブロックし、プロットが になるまでユーザイベントをキャプチャします。
- プロットが閉じられた後、tkアプリは続行する必要があります。
問題の最小限のアプリが問題を示しています。
from Tkinter import *
from matplotlib import pyplot as plt
class Plotter:
def __init__(self):
self.fig = plt.figure()
self.fig.canvas.mpl_connect('close_event', self.dispose)
plt.plot(1, 2, 'r*')
plt.show()
print "done with plotter"
def dispose(self, event):
plt.close('all')
print "disposed"
if __name__ == '__main__':
def pressed():
print 'button pressed'
Plotter()
print 'YAY'
root = Tk()
button = Button(root, text='Press', command=pressed)
button.pack(pady=20, padx=20)
root.mainloop()
悲しいことに、私はpython2.7、matplotlibの(1.5.2)の同じバージョンを使ってMac上のウィンドウではなく、期待通り、この作品を発見しました。 これは良いUIの習慣ではありませんが、このコードではMacとWindowsに違いがあることが気になります。私はこの問題に役立つフィードバックをいただければ幸いです。その間、非ブロッキングスレッドでプロッタを実装し、閉じたときにメインアプリケーションに結果を戻す作業を開始します。
おかげで@nemo!これは実際に期待どおりに動作します。このソリューションでさらにテストを行います。 –