Python 同时控制matplotlib中多个按钮的颜色
我有三个白色按钮[A,B,C]。当这些按钮中的任何一个被点击时,它们应该立即变为绿色。当按顺序单击多个按钮时,只有最近单击的按钮应变为绿色,其他按钮应返回其原始白色状态 我读过这一页,但没用。这是我写的代码。目前,按钮甚至没有变成绿色。我正在使用Matplotlib 2.0Python 同时控制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={
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),它显示按钮工作正常,但是颜色仍然没有变为绿色。谢谢你压缩了我的代码,现在读起来好多了。你能更新这个问题,包括你如何运行代码的详细描述吗?还有,在哪个系统上?您可以尝试使用不同的后端吗?