2013-07-17 99 views
1

我使用matplotlib的FuncAnimation來運行動畫以顯示來自微處理器的數據(實時)。我正在使用按鈕向處理器發送命令,並希望按鈕的顏色在被點擊後發生變化,但是我找不到在matplotlib.widgets.button文檔(尚未)中實現此目的的任何內容。更改matplotlib按下按鈕時的顏色

class Command: 

    def motor(self, event): 
    SERIAL['Serial'].write(' ') 
    plt.draw() 

write = Command() 
bmotor = Button(axmotor, 'Motor', color = '0.85', hovercolor = 'g') 
bmotor.on_clicked(write.motor)   #Change Button Color Here 

回答

2

只需設置button.color

E.g.

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


fig, ax = plt.subplots() 
button = Button(ax, 'Click me!') 

colors = itertools.cycle(['red', 'green', 'blue']) 

def change_color(event): 
    button.color = next(colors) 
    # If you want the button's color to change as soon as it's clicked, you'll 
    # need to set the hovercolor, as well, as the mouse is still over it 
    button.hovercolor = button.color 
    fig.canvas.draw() 

button.on_clicked(change_color) 

plt.show() 
+0

感謝喬!我會試一試 – fergodsake

+0

在這個例子中有一個按鈕。但是如果有幾個按鈕,並且您想要更改單擊的顏色? –

+0

@KurtPeek - 首先,每個按鈕都連接到自己的回調函數,所以當你需要不同的行爲時,你通常會將不同的回調函數連接到不同的按鈕。 (例如,上面的例子使用閉包,所以可以使用更明確的'lambda'或'functools.partial'等等)。但是,如果需要,可以將'event.inaxes'與'button.ax'進行比較。每個'Button'實例佔據一個完整的'Axes',所以事件發生的軸將對應於該按鈕。但是,如果您有重疊的軸,則有一些注意事項(例如,在另一個軸內的按鈕)。 –

1

在當前matplotlib版本(1.4.2)「顏色」和「hovercolor」被考慮到,只有當老鼠_motion'事件已經發生,使按鍵改變顏色而不是當你按下鼠標左鍵,但只有當你移動鼠標後。

不過,您可以手動更改按鈕背景:

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

button = Button(plt.axes([0.45, 0.45, 0.2, 0.08]), 'Blink!') 


def button_click(event): 
    button.ax.set_axis_bgcolor('teal') 
    button.ax.figure.canvas.draw() 

    # Also you can add timeout to restore previous background: 
    plt.pause(0.2) 
    button.ax.set_axis_bgcolor(button.color) 
    button.ax.figure.canvas.draw() 


button.on_clicked(button_click) 

plt.show()