matplotlib navtoolbar 在 wx 2.9 (Mac OS X) 中未实现

2024-01-21

以下代码在 wxPython 2.8.x、Python 2.5.4/2.6、Matplotlib 0.99.x 上运行时,按预期在框架顶部生成 matplotlib NavToolbar2。

然而,我最近转向了 Python 2.7 和 wxPython 2.9.1,试图支持 64 位的 OS X。正是在这种环境下,下面的代码生成了一个空工具栏:

我注意到在构建 matplotlib 时它说 wx 2.9 及更高版本不需要 WxAgg,这可能是问题所在吗?到目前为止我所尝试的只是更换FigureCanvasWxAgg with FigureCanvasWx and NavigationToolbar2WxAgg with NavigationToolbar2Wx。没有运气。

有什么想法吗?

import wx
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg, NavigationToolbar2WxAgg
import matplotlib as mpl

app = wx.PySimpleApp()
f = wx.Frame(None)
fig = mpl.figure.Figure()
p = FigureCanvasWxAgg(f, -1, fig)
tb = NavigationToolbar2WxAgg(fig.canvas)
f.SetToolBar(tb)
tb.Realize()
f.Show()
app.MainLoop()

还有一件事......如果我用我自己的自定义 navtoolbar 类替换 NavigationToolbar2WxAgg (此线程上第一个答案的代码:在 matplotlib 中添加新的导航模式 https://stackoverflow.com/questions/4740988/add-new-navigate-modes-in-matplotlib),除非我删除,否则整个事情都会崩溃tb.Realize().

2011-05-25 08:21:18.354 Python[48013:60f] *** Assertion failure in -[NSToolbar _itemAtIndex:], /SourceCache/AppKit/AppKit-1038.35/Toolbar.subproj/NSToolbar.m:1227
2011-05-25 08:21:18.356 Python[48013:60f] An uncaught exception was raised
2011-05-25 08:21:18.356 Python[48013:60f] Invalid parameter not satisfying: index>=0 && index<[self _numberOfItems]
2011-05-25 08:21:18.358 Python[48013:60f] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: index>=0 && index<[self _numberOfItems]'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff868ef7b4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff83e9b0f3 objc_exception_throw + 45
    2   CoreFoundation                      0x00007fff868ef5d7 +[NSException raise:format:arguments:] + 103
    3   Foundation                          0x00007fff86d7c77e -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 198
    4   AppKit                              0x00007fff806f44a9 -[NSToolbar _itemAtIndex:] + 158
    5   AppKit                              0x00007fff806f3e94 -[NSToolbar _removeItemAtIndex:notifyDelegate:notifyView:notifyFamilyAndUpdateDefaults:] + 56
    6   libwx_osx_cocoau-2.9.1.0.0.dylib    0x0000000101aea2a6 _ZN9wxToolBar7RealizeEv + 1430
    7   _controls_.so                       0x00000001048d4b76 _wrap_ToolBarBase_Realize + 102
    8   .Python                             0x00000001000ca81a PyEval_EvalFrameEx + 23498
    9   .Python                             0x00000001000cc8c5 PyEval_EvalCodeEx + 1733
    10  .Python                             0x00000001000ca9bf PyEval_EvalFrameEx + 23919
    11  .Python                             0x00000001000cc8c5 PyEval_EvalCodeEx + 1733
    12  .Python                             0x00000001000cb0c8 PyEval_EvalFrameEx + 25720
    13  .Python                             0x00000001000cc8c5 PyEval_EvalCodeEx + 1733
    14  .Python                             0x00000001000ca9bf PyEval_EvalFrameEx + 23919
    15  .Python                             0x00000001000cb2a6 PyEval_EvalFrameEx + 26198
    16  .Python                             0x00000001000cb2a6 PyEval_EvalFrameEx + 26198
    17  .Python                             0x00000001000cc8c5 PyEval_EvalCodeEx + 1733
    18  .Python                             0x00000001000ca9bf PyEval_EvalFrameEx + 23919
    19  .Python                             0x00000001000cb2a6 PyEval_EvalFrameEx + 26198
    20  .Python                             0x00000001000cc8c5 PyEval_EvalCodeEx + 1733
    21  .Python                             0x00000001000ccbc6 PyEval_EvalCode + 54
    22  .Python                             0x00000001000f0c7e PyRun_FileExFlags + 174
    23  .Python                             0x00000001000f1aa1 PyRun_SimpleFileExFlags + 817
    24  .Python                             0x00000001001093d9 Py_Main + 2825
    25  Python                              0x0000000100000f54 0x0 + 4294971220
)
terminate called after throwing an instance of 'NSException'

这看起来像是一个错误,但我不知道问题是否出在 matplotlib、wxPython 或 backend_wx.py 中。我所做的修复它是我查看了backend_wx.py 源代码 http://www.java2s.com/Open-Source/Python/Chart-Report/Matplotlib/matplotlib-0.99.1.1/lib/matplotlib/backends/backend_wx.py.htm并将其直接放入我的 wxPython 工具栏中。所以这对我有用:

import os
import wx
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg, NavigationToolbar2WxAgg
from matplotlib.backends.backend_wx import _load_bitmap
import matplotlib as mpl


app = wx.PySimpleApp()
f = wx.Frame(None)
fig = mpl.figure.Figure()
p = FigureCanvasWxAgg(f, -1, fig)

toolbar = NavigationToolbar2WxAgg(p)
toolbar.Hide()

#toolbar constants
TBFLAGS = (wx.TB_HORIZONTAL|wx.TB_TEXT)      
tsize = (24,24)
tb = f.CreateToolBar(TBFLAGS)

_NTB2_HOME = wx.NewId()
_NTB2_BACK = wx.NewId()
_NTB2_FORWARD = wx.NewId()
_NTB2_PAN = wx.NewId()
_NTB2_ZOOM = wx.NewId()
_NTB2_SAVE = wx.NewId()
_NTB2_SUBPLOT = wx.NewId()

tb.AddSimpleTool(_NTB2_HOME, _load_bitmap('home.png'), 'Home', 'Reset original view')
tb.AddSimpleTool(_NTB2_BACK, _load_bitmap('back.png'), 'Back', 'Back navigation view')
tb.AddSimpleTool(_NTB2_FORWARD, _load_bitmap('forward.png'), 'Forward', 'Forward navigation view')

tb.AddCheckTool(_NTB2_PAN, _load_bitmap('move.png'), shortHelp='Pan', longHelp='Pan with left, zoom with right')
tb.AddCheckTool(_NTB2_ZOOM, _load_bitmap('zoom_to_rect.png'), shortHelp='Zoom', longHelp='Zoom to rectangle')

tb.AddSeparator()
tb.AddSimpleTool(_NTB2_SUBPLOT, _load_bitmap('subplots.png'), 'Configure subplots', 'Configure subplot parameters')
tb.AddSimpleTool(_NTB2_SAVE, _load_bitmap('filesave.png'), 'Save', 'Save plot contents to file')

f.Bind(wx.EVT_TOOL, toolbar.home, id=_NTB2_HOME)
f.Bind(wx.EVT_TOOL, toolbar.forward, id=_NTB2_FORWARD)
f.Bind(wx.EVT_TOOL, toolbar.back, id=_NTB2_BACK)
f.Bind(wx.EVT_TOOL, toolbar.zoom, id=_NTB2_ZOOM)
f.Bind(wx.EVT_TOOL, toolbar.pan, id=_NTB2_PAN)
f.Bind(wx.EVT_TOOL, toolbar.configure_subplot, id=_NTB2_SUBPLOT)
f.Bind(wx.EVT_TOOL, toolbar.save, id=_NTB2_SAVE)

tb.Realize()  

tb.Realize()
f.Show()
app.MainLoop()

这是一个快速修复,但我猜有人必须为此提交一份错误报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib navtoolbar 在 wx 2.9 (Mac OS X) 中未实现 的相关文章

随机推荐

  • WPF DataTemplate 下的排序 ItemsControl

    我在 DataTemplate 下使用 ItemsControl 我想对 ItemsControl 进行排序ic使用 id 列
  • Unity3D C# 检查事件是否为空

    例如 DelegateHandler是我发送事件的地方 public class DelegateHandler MonoBehaviour public delegate void OnButtonClickDelegate public
  • 方法签名中的Java“参数”?

    在C 中 如果希望方法具有不确定数量的参数 可以将方法签名中的最后一个参数设为params这样方法参数看起来像一个数组 但允许使用该方法的每个人根据调用者的需要传递任意数量的该类型的参数 我相当确定 Java 支持类似的行为 但我不知道如何
  • 查找子字符串,带有一些附加条件

    我得到了一个如下所示的字符串 1011010100 我的任务是找到一个子字符串的长度 其中空值的数量始终 10110101 gt 8 我知道复杂度应该是 O n 或 O n log n 因为长度最多可达 10 6 有任何想法吗 The O
  • 在 Android 上,我可以注册一个回调来告诉我蓝牙是否打开或关闭吗?

    我需要知道我的应用程序内部蓝牙是否打开或关闭 或者蓝牙是否打开或关闭 例如从操作系统设置下拉菜单 我想我可以在活动中做到这一点onResume 但事实证明 当 Android 操作系统的设置 下拉菜单 通过用手指从屏幕顶部边缘下拉来访问的菜
  • 用于计算类数的部分语法

    我需要计算正确的 C 源文件中的类数量 我写了以下语法 grammar CSharpClassGrammar options language CSharp2 parser namespace CSharpClassGrammar Gene
  • H2 表列在双引号中不区分大小写

    我正在开发一个工具 它将数据导入到动态生成的模式中 因此 我几乎无法控制表或列名称的外观 我最近遇到了在表中创建两列名称相同但大小写不同的问题 这个问题可以通过这个最简单的 DDL 操作来演示 CREATE TABLE a c1 integ
  • 尝试使用 BayesSearchCV 调整 MLPClassifier hide_layer_sizes 时出错

    当尝试调整 sklearn 时MLP分类器hidden layer sizes超参数 使用贝叶斯搜索CV 我收到错误 ValueError can only convert an array of size 1 to a Python sc
  • Android在哪里存储SQLite的数据库版本?

    我无法找到 Android 在 SQLite 数据库文件中存储数据库版本的位置 数据库版本到底存储在哪里 您可以使用以下方式阅读版本android database sqlite SQLiteDatabase getVersion 在内部
  • appcompat 库样式如何工作

    我对 appcompat 库中的样式如何工作感到非常困惑 根据here https chris banes me 2014 10 17 appcompat v21 我们现在使用 Toolbar ActionBar 的支持实现 平台意味着我们
  • 检查二叉树是否是二叉搜索树的伪代码 - 不确定递归

    我的作业是编写伪代码来检查有效的二叉树是否是搜索二叉树 我创建了一个数组来保存树的有序值 如果有序值按降序排列 则意味着它确实是 BST 但是 我在方法 InOverArr 中的递归方面遇到了一些问题 我需要更新数组的索引 以便按照值在树中
  • 使用 React Portal 时将 css 注入到 window.document

    我正在使用反应门户来呈现我的反应视图的可打印版本 这就是我所做的 import Component from react import ReactDOM from react dom export default class PortalW
  • 内容宽度未知的 jCarousel

    我正在尝试使用 jQuery 的 jCarousel 插件 以便为我的网站用户提供可滚动 水平 内容 我提到的内容基本上都是用户定义的 li 元素的样式使其具有选项卡的感觉和外观 所以基本上我试图实现与 pageflakes com 中的选
  • 为什么我的 Windows 10 PC 在调用 SetWaitableTimer() 后没有唤醒?

    我有两台 Windows 10 电脑 都运行 Fall Creators Update 并安装了所有最新补丁 一个在通过 CreateWaitableTimer SetWaitableTimer 设置计时器后从睡眠中唤醒 另一个则不会 这是
  • 设置 HTTP 标头

    我正在尝试在我的 Go Web 服务器中设置标头 我在用着gorilla mux and net http包 我想设置Access Control Allow Origin 允许跨域AJAX 这是我的 Go 代码 func saveHand
  • PHP Curl+连接被拒绝

    我在 PHP Curl 中收到此错误 Hostname in DNS cache was stale zapped Trying xxx xx x xx connect to xxx xx x xx port 4005 failed Con
  • 为什么 backgroundColor=rgb(a,b,c) 不起作用?

    为什么背景颜色不根据RGB值改变 我做错了什
  • Java中关于集合、枚举和迭代器的困惑

    我的教科书几乎没有讲到Java中的枚举 我看过的视频也没有解释太多 所以根据我的理解 枚举就像一个完全不同的类 你可以在其中存储常量 有人可以向我详细介绍一下常量吗 也许 给我看看更好的例子 就像我在看到示例后明白了什么是常量一样 例如颜色
  • sklearn 中关于空数组的弃用错误,在我的代码中没有任何空数组

    我只是在玩编码和解码 但我从 sklearn 收到此错误 警告 来自警告模块 文件 C Python36 lib site packages sklearn preprocessing label py 第 151 行 如果差异 Depre
  • matplotlib navtoolbar 在 wx 2.9 (Mac OS X) 中未实现

    以下代码在 wxPython 2 8 x Python 2 5 4 2 6 Matplotlib 0 99 x 上运行时 按预期在框架顶部生成 matplotlib NavToolbar2 然而 我最近转向了 Python 2 7 和 wx