首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wxPython和matplotlib.widgets

wxPython和matplotlib.widgets
EN

Stack Overflow用户
提问于 2012-12-25 12:07:49
回答 1查看 608关注 0票数 1

我正在开发一个Python应用程序,它将wxPython用于带有嵌入式matplotlib图形的图形用户界面。在我尝试使用名为SpanSelector的matplotlib GUI-neutral widget之前,它一直运行得很好。之前,我试图自己编写这种行为,但进展不是很好,所以我很高兴有一个内置的小部件可以为我解决这个问题。这些小部件应该可以与任何图形用户界面后端一起工作,而wxPython绝对是一个受支持的后端。

目前,我的代码非常简单;我有一个已定义的应用程序类,其中包含以下(相关)函数:

代码语言:javascript
复制
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_selection_manual,但在绘图上单击并拖动并不会创建选择,回调process_selection_manual也不会被调用。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-25 15:13:42

事实证明这是一个非常简单的解决方案:必须将span声明为self.span...也许在它可以做任何事情之前,它已经被垃圾回收了?在任何情况下,它现在都可以工作,如果我替换

代码语言:javascript
复制
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"))

使用

代码语言:javascript
复制
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"))

我还删除了useblit标志,因为它弄乱了颜色;我不认为它与这个修复相关,但仍然值得注意。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14027596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档