前提・実現したいこと
プログラムを実行し、右クリックで範囲を選択し、左ダブルクリックで範囲決定すると選択した範囲が赤色になります。これを二回繰り返し、二つ範囲を選択した後に、tkinterの「一回目の範囲選択やり直し」を押して一回目に選択した範囲の赤色を消し、「二回目の範囲選択やり直しと線を消す」を押して二回目に選択した範囲の赤色を消すと同時に元から引いてあった直線を消したいと考えています。
発生している問題
ボタンを押したらhikinaoshiを実行し、赤い線の上から青い線を引いて赤を消すというやり方を試しましたが、一番最後に選択した範囲にしか適用されず、一回目に選択した範囲、二回目に選択した範囲とどのように分ければ良いのかと、引いている線の消し方がわからず、悩んでいます。アドバイスを頂けたら嬉しいです。よろしくお願いします。
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3import tkinter as tk 4 5root = tk.Tk() 6root.geometry('300x200') 7root.title('tkinter') 8 9def oncmask(event): 10 11 global stat 12 global leftind, rightind 13 14 15 ind=np.searchsorted(xdata,event.xdata) 16 plt.title("You clicked index="+str(ind)) 17 if event.button==3 and stat==1: 18 leftind=ind 19 ax.plot([xdata[ind]],[ydata[ind]],".",color="red") 20 stat=2 21 elif event.button==3 and stat==2: 22 rightind=ind 23 ax.plot(xdata[leftind:rightind],ydata[leftind:rightind],color="red") 24 stat=3 25 elif event.button==1 and event.dblclick==1 and stat==3: 26 plt.title("Approved") 27 mask[leftind:rightind]=False 28 stat=1 29 fig.canvas.draw() 30 31def hikinaoshi(): 32 ax.plot(xdata[leftind:rightind],ydata[leftind:rightind],color="blue") 33 fig.canvas.draw() 34 35 36def f(x): 37 temp =[] 38 for index in x: 39 temp.append(max(5.*index+10.,-3.*index + 10)) 40 return temp 41 42xdata = np.linspace(-10, 10, num=201) 43ydata = f(xdata)+ 5.*np.random.randn(xdata.size) 44 45button1 = tk.Button(root, text="一回目の範囲選択やり直し") 46button1.place(x=70,y=50) 47# button1["command"] = hikinaoshi 48button2 = tk.Button(root, text="二回目の範囲選択やり直しと線を消す") 49button2.place(x=70,y=100) 50button2["command"] = hikinaoshi 51 52mask=np.ones(len(xdata),dtype=bool) 53 54stat = 1 55fig=plt.figure() 56ax=fig.add_subplot(111) 57ax.plot(xdata,ydata) 58cid = fig.canvas.mpl_connect('button_press_event', oncmask) 59 60a_fit = 5 61b_fit = 8 62plt.plot(xdata,a_fit*xdata+b_fit,'k-', label='fitted line', linewidth=3, alpha=0.3) 63 64plt.show() 65 66 67root.mainloop() 68
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 09:30 編集
2021/01/13 23:50
2021/01/14 08:44
2021/01/15 11:44