按钮在第二个(嵌套)figu中不起作用

2024-10-02 10:26:37 发布

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

我想我在Matplotlib中遇到了一个bug,不过我真的希望它只是我缺少的一些简单的东西。在

我正在编写的代码在Ubuntu11.10、Ubuntu12.04和MacOS上运行良好。最近我在我的机器上安装了fedora18,我注意到Matplotlib有一些问题:我有一个带有按钮的图形。单击按钮,它会打开另一个窗口,其中也有一些按钮。第二个窗口中的按钮在我的软呢帽系统上是不活动的。它们不响应hover(它们不改变颜色),也不响应click。在

下面是一小段模拟这个问题的代码。这在我的ubuntu12.04上运行得很好,但在Fedora上不行。它的工作原理如下:用一个大按钮显示一个图形,如果你点击这个按钮,它将显示另一个同样有按钮的图形。如果一切正常,第二个按钮应该对hover做出响应,并在单击时向终端打印一些内容。在

import pylab
from matplotlib.widgets import Button


def draw_button1(event):

    pylab.figure()
    a = pylab.axes([0.1, 0.1, 0.8, 0.8])
    b = Button(a, 'Button 1')

    def say_something(event):
        print "This works."

    b.on_clicked(say_something)
    pylab.show()

def draw_button2():
    pylab.figure()
    a = pylab.axes([0.1, 0.1, 0.8, 0.8])
    b = Button(a, 'Button 2')
    b.on_clicked(draw_button1)
    pylab.show()

draw_button2()

我不知道是什么引起的。我试过很多方法:

  1. 我已经从yum存储库安装了Matplitlib 1.2.0、1.2.1,以及从源代码构建的最新1.3.0rc2。他们都做同样的事。我还安装了Matplotlib的所有相关依赖项,甚至是那些可选的。

  2. 我试着在我的Fedora机器上远程运行ubuntu12.04上的一段代码。。也许X渲染那些窗口的方式有问题?在我的Ubuntu上仍然可以工作,在我的软呢帽上渲染。

  3. 在谷歌上疯狂搜索这个问题,但并没有起到什么作用。人们建议使用pylab.ion()和{}来进行交互式绘图,但这也没什么用。

如果有任何帮助,下面是我的Matplotlib构建:

^{pr2}$

提前非常感谢!在


Tags: 代码import机器event图形matplotlibdefbutton
1条回答
网友
1楼 · 发布于 2024-10-02 10:26:37

你遇到了范围界定的问题。当按钮对象超出范围时,它的所有回调都将被清除。要使按钮正常工作,您需要保留对Button对象的引用。在

def draw_button2():
    pylab.figure()
    a = pylab.axes([0.1, 0.1, 0.8, 0.8])
    b = Button(a, 'Button 2')
    b.on_clicked(draw_button1)
    pylab.show()
    return b

b = draw_button2()

这将使您的第一个按钮工作,但要使第二个按钮工作,您需要某种全局结构。要做到这一点,最简单的方法是将所有这些函数打包到一个类中以跟踪它们,而最常用的方法是向图形对象添加属性:

^{pr2}$

相关问题 更多 >

    热门问题