wxPython和matplotlib.widgets

wxPython和matplotlib.widgets,python,matplotlib,wxpython,Python,Matplotlib,Wxpython,我正在开发一个Python应用程序,它将wxPython用于带有嵌入式matplotlib图形的GUI。在我尝试使用一个名为SpanSelector的matplotlib之前,它运行得非常顺利。以前,我试图自己编写这种行为,但进展不太顺利,所以我很高兴有一个内置的小部件可以帮我处理它。这些小部件应该与任何GUI后端一起工作,wxPython绝对是一个受支持的后端 目前我的代码非常简单;我有一个已定义的应用程序类,具有以下(相关)功能: def init_gui(self): ...

我正在开发一个Python应用程序,它将wxPython用于带有嵌入式matplotlib图形的GUI。在我尝试使用一个名为
SpanSelector
的matplotlib之前,它运行得非常顺利。以前,我试图自己编写这种行为,但进展不太顺利,所以我很高兴有一个内置的小部件可以帮我处理它。这些小部件应该与任何GUI后端一起工作,wxPython绝对是一个受支持的后端

目前我的代码非常简单;我有一个已定义的应用程序类,具有以下(相关)功能:

def init_gui(self):
    ...
    self.button5 = wx.Button(tab, label="Manual select", size=(120, 30))
    self.button5.Bind(wx.EVT_BUTTON, self.get_selection_manual)
    ...

def get_selection_manual(self, event):
    span = matplotlib.widgets.SpanSelector(self.ax, \
        self.process_selection_manual, "horizontal", useblit=True, \
        rectprops=dict(alpha=0.5, facecolor="red"))

def process_selection_manual(self, vmin, vmax):
    print vmin, vmax
如果它正在工作,它所要做的就是打印出用户在单击按钮后所做的选择。我知道调用了
get\u selection\u manual
,但是在绘图上单击并拖动永远不会创建选择,并且回调
process\u selection\u manual
也永远不会调用


我尝试输入
sleep()
,然后更新显示。有趣的是,当我的应用程序在
sleep(5)
而不是
time.sleep(5)
上崩溃时,我让它(某种程度上)工作了。因此Python被暂停了,但它像当时应该的那样绘制了选择。我以前从未见过这种情况,我也不确定这意味着什么。我还没有找到一起使用wxPython和matplotlib小部件的例子,因此非常感谢您的帮助。

这是一个非常简单的解决方案:
span
必须声明
self.span
。。。也许它还没来得及做点什么就把垃圾收集起来了?在任何情况下,如果我更换

def get_selection_manual(self, event):
    span = matplotlib.widgets.SpanSelector(self.ax, \
        self.process_selection_manual, "horizontal", useblit=True, \
        rectprops=dict(alpha=0.5, facecolor="red"))


我还删除了
useblit
标志,因为它弄乱了颜色;我认为这与此修复无关,但值得注意的是仍然有用。

这很可能会起作用;退出功能范围后被擦除可能会对其健康造成危害。
def get_selection_manual(self, event):
    self.span = matplotlib.widgets.SpanSelector(self.ax, \
        self.process_selection_manual, "horizontal", \
        rectprops=dict(alpha=0.5, facecolor="red"))