获取 Matplotlib 单选按钮的状态
Get status of Matplotlib radio button
使用Matplotlib,我可以通过"mySlider.val"获取一个Slider widget的值,非常方便。是否有等效的功能来获取单选按钮的当前选择?我认为这个问题是 this question 想问的问题,但提问者没有提供有效的例子。我提供了以下示例,指出了我正在寻找的缺失的代码行。
from matplotlib.widgets import RadioButtons, Button, Slider
import matplotlib.pyplot as plt
axSlider = plt.axes([0.1, 0.8, 0.4, 0.05])
aSlider = Slider(axSlider,'A slider', 0,1, valinit=0.5)
axRadio = plt.axes([0.1, 0.2, 0.3, 0.4])
butRadio = RadioButtons(axRadio, ('Top','Middle','Bottom'))
axStatus = plt.axes([0.5, 0.2, 0.3, 0.4])
bStatus = Button(axStatus,'Get status of radio buttons')
def get_status(val):
#radioValue = ???? -- Need this line of code.
radioValue = 0
sliderValue= aSlider.val
print 'Slider value: %.2f, Radio button value: %.2f'%(sliderValue,radioValue)
bStatus.on_clicked(get_status)
plt.show()
输出结果如下:
如果这不可能,你能推荐一个优雅的work-around吗?目前我正在为单选按钮使用 "on_clicked" 函数并使用单选按钮的值设置全局变量,这很混乱。
根据@tcaswell 的建议,我在 github 上向 matplotlib 提交了 pull request,现在可以查询 RadioButtons 的当前状态。缺少的代码行是:
radioValue = butRadio.value_selected
计划将其合并到 matplotlib 的 1.5.x 版本中。同时,如果你想使用这个功能,你需要下载 matplotlib from github 的开发版本(或者,至少下载 'widgets.py' 文件)。
这现已合并到当前版本的 Matplotlib (1.5.3) 中。 (参见 Widets Docs。)如果以上行不起作用,您可能只需更新 Matplotlib。
刚刚在对同一问题进行研究时偶然发现了这个 post。他们还没有对 matplotlib 进行任何更新,尽管我确实在此处找到了有关从 matplotlib 的复选按钮中检索值的相关 post:Retrieving the selected values from a CheckButtons object in matplotlib
总而言之,答案就是保留一个 dict
,您可以在其中为每个按钮存储一个变量。每当按下按钮时,让事件处理程序更改 dict
中的必要值,然后其他函数可以根据需要访问这些值,而不是仅将这些值困在事件处理程序中。
希望对您有所帮助!我知道我不想玩弄 matplotlib 的源代码
最简单的答案是:
from matplotlib.widgets import RadioButtons, Button, Slider
import matplotlib.pyplot as plt
axSlider = plt.axes([0.1, 0.8, 0.4, 0.05])
aSlider = Slider(axSlider,'A slider', 0,1, valinit=0.5)
axRadio = plt.axes([0.1, 0.2, 0.3, 0.4])
my_list = ('Top','Middle','Bottom')
butRadio = RadioButtons(axRadio, my_list)
axStatus = plt.axes([0.5, 0.2, 0.3, 0.4])
bStatus = Button(axStatus,'Get status of radio buttons')
def activated_radio_button(x,list):
for i in xrange(len(x.circles)):
if x.circles[i].get_facecolor()[0]<.5:
return list[i]
def get_status(label):
radioValue = activated_radio_button(butRadio,my_list)
sliderValue= aSlider.val
print 'Slider value: %.2f, Radio button value: %s'%(sliderValue,radioValue)
bStatus.on_clicked(get_status)
plt.show()
使用Matplotlib,我可以通过"mySlider.val"获取一个Slider widget的值,非常方便。是否有等效的功能来获取单选按钮的当前选择?我认为这个问题是 this question 想问的问题,但提问者没有提供有效的例子。我提供了以下示例,指出了我正在寻找的缺失的代码行。
from matplotlib.widgets import RadioButtons, Button, Slider
import matplotlib.pyplot as plt
axSlider = plt.axes([0.1, 0.8, 0.4, 0.05])
aSlider = Slider(axSlider,'A slider', 0,1, valinit=0.5)
axRadio = plt.axes([0.1, 0.2, 0.3, 0.4])
butRadio = RadioButtons(axRadio, ('Top','Middle','Bottom'))
axStatus = plt.axes([0.5, 0.2, 0.3, 0.4])
bStatus = Button(axStatus,'Get status of radio buttons')
def get_status(val):
#radioValue = ???? -- Need this line of code.
radioValue = 0
sliderValue= aSlider.val
print 'Slider value: %.2f, Radio button value: %.2f'%(sliderValue,radioValue)
bStatus.on_clicked(get_status)
plt.show()
输出结果如下:
如果这不可能,你能推荐一个优雅的work-around吗?目前我正在为单选按钮使用 "on_clicked" 函数并使用单选按钮的值设置全局变量,这很混乱。
根据@tcaswell 的建议,我在 github 上向 matplotlib 提交了 pull request,现在可以查询 RadioButtons 的当前状态。缺少的代码行是:
radioValue = butRadio.value_selected
计划将其合并到 matplotlib 的 1.5.x 版本中。同时,如果你想使用这个功能,你需要下载 matplotlib from github 的开发版本(或者,至少下载 'widgets.py' 文件)。
这现已合并到当前版本的 Matplotlib (1.5.3) 中。 (参见 Widets Docs。)如果以上行不起作用,您可能只需更新 Matplotlib。
刚刚在对同一问题进行研究时偶然发现了这个 post。他们还没有对 matplotlib 进行任何更新,尽管我确实在此处找到了有关从 matplotlib 的复选按钮中检索值的相关 post:Retrieving the selected values from a CheckButtons object in matplotlib
总而言之,答案就是保留一个 dict
,您可以在其中为每个按钮存储一个变量。每当按下按钮时,让事件处理程序更改 dict
中的必要值,然后其他函数可以根据需要访问这些值,而不是仅将这些值困在事件处理程序中。
希望对您有所帮助!我知道我不想玩弄 matplotlib 的源代码
最简单的答案是:
from matplotlib.widgets import RadioButtons, Button, Slider
import matplotlib.pyplot as plt
axSlider = plt.axes([0.1, 0.8, 0.4, 0.05])
aSlider = Slider(axSlider,'A slider', 0,1, valinit=0.5)
axRadio = plt.axes([0.1, 0.2, 0.3, 0.4])
my_list = ('Top','Middle','Bottom')
butRadio = RadioButtons(axRadio, my_list)
axStatus = plt.axes([0.5, 0.2, 0.3, 0.4])
bStatus = Button(axStatus,'Get status of radio buttons')
def activated_radio_button(x,list):
for i in xrange(len(x.circles)):
if x.circles[i].get_facecolor()[0]<.5:
return list[i]
def get_status(label):
radioValue = activated_radio_button(butRadio,my_list)
sliderValue= aSlider.val
print 'Slider value: %.2f, Radio button value: %s'%(sliderValue,radioValue)
bStatus.on_clicked(get_status)
plt.show()