2017-03-25 3 views
1

私は3つの白いボタン[A、B、C]を持っています。これらのボタンのいずれかをクリックすると、すぐに緑色に変わります。連続して複数のボタンをクリックすると、最後にクリックされたものだけが緑色に変わり、他のボタンは元の白い状態に戻るはずです。matplotlibの複数のボタンの色を同時に制御します

私はこのページを読んだが、役に立たなかった。ここに私が書いたコードがあります。現時点では、ボタンは緑色になっていません。私はMatplotlib 2.0を使用しています。

from matplotlib.widgets import Button 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 


button_axcut={} 
button={} 

button_axcut['A'] = plt.axes([0.25,0.5, 0.1, 0.1]) 
button['A'] = Button(button_axcut['A'] ,'A', color='white') 

button_axcut['B'] = plt.axes([0.45,0.5, 0.1, 0.1]) 
button['B'] = Button(button_axcut['B'] ,'B', color='white') 

button_axcut['C'] = plt.axes([0.65,0.5, 0.1, 0.1]) 
button['C'] = Button(button_axcut['C'],'C', color='white') 


def A_clicked(event): 
    print('A') 
    button['A'].ax.set_facecolor('green') 
    button['B'].ax.set_facecolor('white') 
    button['C'].ax.set_facecolor('white') 

    button['A'].ax.figure.canvas.draw() 
    button['B'].ax.figure.canvas.draw() 
    button['C'].ax.figure.canvas.draw() 

def B_clicked(event): 
    print('B') 
    button['A'].ax.set_facecolor('white') 
    button['B'].ax.set_facecolor('green') 
    button['C'].ax.set_facecolor('white') 

    button['A'].ax.figure.canvas.draw() 
    button['B'].ax.figure.canvas.draw() 
    button['C'].ax.figure.canvas.draw() 

def C_clicked(event): 
    print('C') 
    button['A'].ax.set_facecolor('white') 
    button['B'].ax.set_facecolor('white') 
    button['C'].ax.set_facecolor('green') 

    button['A'].ax.figure.canvas.draw() 
    button['B'].ax.figure.canvas.draw() 
    button['C'].ax.figure.canvas.draw() 

button['A'].on_clicked(A_clicked) 
button['B'].on_clicked(B_clicked) 
button['C'].on_clicked(C_clicked) 

enter image description here

答えて

0

私が最後にplt.show()を追加し、スクリプトとしてコードを実行すると、それはすでに正常に動作しています。これは、Qt4AggとTkAggバックエンドを使用して、Python 2.7のmatplotlib 2.0でテストされました。軸の外にマウスを移動したとき

一つは、コードを少し凝縮し、ボタンはその色を維持することを確認することができ、次のように:

from matplotlib.widgets import Button 
import matplotlib.pyplot as plt 

fig, ax = plt.subplots() 


button_axcut={} 
button={} 

button_axcut['A'] = plt.axes([0.25,0.5, 0.1, 0.1]) 
button['A'] = Button(button_axcut['A'] ,'A', color='white') 

button_axcut['B'] = plt.axes([0.45,0.5, 0.1, 0.1]) 
button['B'] = Button(button_axcut['B'] ,'B', color='white') 

button_axcut['C'] = plt.axes([0.65,0.5, 0.1, 0.1]) 
button['C'] = Button(button_axcut['C'],'C', color='white') 

def click(event): 
    for b in ["A", "B", "C"]: 
     if button[b].ax == event.inaxes: 
      button[b].ax.set_facecolor('green') 
      button[b].color = 'green' 
     else: 
      button[b].ax.set_facecolor('white') 
      button[b].color = 'white' 
    fig.canvas.draw_idle() 


for b in ["A", "B", "C"]: 
    button[b].on_clicked(click) 

plt.show() 
+0

iは(b)のif文の下にプリントを追加しましたボタンが正常に動作していることを示していますが、色はまだ緑色に変化していません。私のコードを凝縮してくれてありがとう。 – themachinist

+0

質問を更新して、コードをどのように実行するかの詳細な説明を追加できますか?また、どのシステム?別のバックエンドを使用できますか? – ImportanceOfBeingErnest

関連する問題