Python 同时控制matplotlib中多个按钮的颜色

Python 同时控制matplotlib中多个按钮的颜色,python,matplotlib,interactive,Python,Matplotlib,Interactive,我有三个白色按钮[A,B,C]。当这些按钮中的任何一个被点击时,它们应该立即变为绿色。当按顺序单击多个按钮时,只有最近单击的按钮应变为绿色,其他按钮应返回其原始白色状态 我读过这一页,但没用。这是我写的代码。目前,按钮甚至没有变成绿色。我正在使用Matplotlib 2.0 from matplotlib.widgets import Button import matplotlib.pyplot as plt fig, ax = plt.subplots() button_axcut={

我有三个白色按钮[A,B,C]。当这些按钮中的任何一个被点击时,它们应该立即变为绿色。当按顺序单击多个按钮时,只有最近单击的按钮应变为绿色,其他按钮应返回其原始白色状态

我读过这一页,但没用。这是我写的代码。目前,按钮甚至没有变成绿色。我正在使用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)

当我以脚本的形式运行代码,并在最后添加
plt.show()
时,它已经可以正常工作了。这是使用python 2.7中的matplotlib 2.0测试的,使用了Qt4Agg和TkAgg后端

将鼠标移出轴时,可以稍微压缩代码并确保按钮保持其颜色,如下所示:

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

当我以脚本的形式运行代码,并在最后添加
plt.show()
时,它已经可以正常工作了。这是使用python 2.7中的matplotlib 2.0测试的,使用了Qt4Agg和TkAgg后端

将鼠标移出轴时,可以稍微压缩代码并确保按钮保持其颜色,如下所示:

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

我在if语句下添加了一个print(b),它显示按钮工作正常,但是颜色仍然没有变为绿色。谢谢你压缩了我的代码,现在读起来好多了。你能更新这个问题,包括你如何运行代码的详细描述吗?还有,在哪个系统上?你能尝试使用不同的后端吗?我在if语句下添加了一个print(b),它显示按钮工作正常,但是颜色仍然没有变为绿色。谢谢你压缩了我的代码,现在读起来好多了。你能更新这个问题,包括你如何运行代码的详细描述吗?还有,在哪个系统上?您可以尝试使用不同的后端吗?