获取Matplotlib单选按钮的状态

2024-09-27 21:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Matplotlib,我可以通过使用迈斯利德.val“,非常方便。是否有同等的能力来获取单选按钮的当前选择?我认为这个问题就是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()

输出如下:

enter image description here

如果这是不可能的,你能建议一个优雅的工作环境吗?目前,我正在使用单选按钮的“onhuclicked”函数,并用单选按钮的值设置全局变量,这很混乱。在


Tags: importmatplotlibstatusbuttonpltvalthis按钮
3条回答

最简单的答案是:

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进行任何更新,尽管我在这里找到了一篇关于从matplotlib的checkbutton检索值的相关帖子:Retrieving the selected values from a CheckButtons object in matplotlib

总结一下答案,就是保留一个dict,其中为每个按钮存储一个变量。每当按下按钮时,让事件处理程序更改dict中的必要值,然后其他函数可以根据需要访问这些值,而不是仅在事件处理程序中捕获值。在

希望这有帮助!我知道我不想玩弄matplotlib的源代码

根据@tcaswell的建议,我向github上的matplotlib提交了一个pull request,现在可以查询单选按钮的当前状态了。缺少的代码行是:

radioValue = butRadio.value_selected

这将被纳入matplotlib的1.5.x版本中。同时,如果你想使用这个特性,你需要下载matplotlib from github的开发版本(或者至少下载'小工具.py'文件)。

这一点现在已经包含在Matplotlib(1.5.3)的当前版本中。(请参阅Widets Docs)如果上面这行代码不起作用,您可以只更新Matplotlib。在

相关问题 更多 >

    热门问题