2013-07-17 2 views
1

Я запускаю анимацию с использованием matplotlib's FuncAnimation для отображения данных (в прямом эфире) с микропроцессора. Я использую кнопки для отправки команд процессору и хотел бы, чтобы цвет кнопки менялся после нажатия, но я не могу найти что-либо в документации matplotlib.widgets.button (пока), которая достигает этого.Change 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' захватывает целые« оси », поэтому оси, в которых происходит событие, будут соответствовать кнопке. Однако есть некоторые оговорки, если у вас есть перекрывающиеся оси (например, кнопка внутри других осей). –

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()