【问题标题】:Strange issues with wxpython, wx-3.0-gtk2. C++ assertion "IsOk()" failedwxpython,wx-3.0-gtk2 的奇怪问题。 C++ 断言“IsOk()”失败
【发布时间】:2017-09-15 07:12:37
【问题描述】:

我使用的是TaskCoach-1.4.3,它是用Python2.7和wxpython-3.0-gtk2编写的。没有对原始代码进行任何更改,我使用它超过 2 年,但有一天它停止工作并出现奇怪的错误。

Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-primary-button-warps-slider' of type `gboolean' from rc file value "((GString*) 0x5d546b17a0)" of type `gboolean'
Traceback (most recent call last):
  File "/home/user/bin/taskcoach/taskcoachlib/gui/artprovider.py", line 62, in CreateBitmap
    return self._CreateBitmap(artId, artClient, size)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/artprovider.py", line 69, in _CreateBitmap
    bitmap = icons.catalog[catalogKey].getBitmap()
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/lib/embeddedimage.py", line 48, in GetBitmap
    return wx.BitmapFromImage(self.GetImage())
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/_gdi.py", line 884, in BitmapFromImage
    val = _gdi_.new_BitmapFromImage(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "image.IsOk()" failed at /var/tmp/portage/x11-libs/wxGTK-3.0.2.0-r2/work/wxPython-src-3.0.2.0/src/gtk/bitmap.cpp(626) in wxBitmap(): invalid image
persons_icon
Traceback (most recent call last):
  File "/home/user/bin/tasker", line 72, in <module>
    start()
  File "/home/user/bin/tasker", line 63, in start
    app = application.Application(options, args)
  File "/home/user/bin/taskcoach/taskcoachlib/patterns/singleton.py", line 29, in __call__
    class_.instance = super(Singleton, class_).__call__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/application/application.py", line 117, in __init__
    self.init(**kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/application/application.py", line 226, in init
    self.settings, splash=splash)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/mainwindow.py", line 68, in __init__
    self._create_window_components()  # Not private for test purposes
  File "/home/user/bin/taskcoach/taskcoachlib/gui/mainwindow.py", line 140, in _create_window_components
    viewer.addViewers(self.viewer, self.taskFile, self.settings)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 45, in __init__
    self.__add_all_viewers()
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 49, in __add_all_viewers
    self.__add_viewers(task.TaskViewer)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/factory.py", line 66, in __add_viewers
    **self._viewer_kwargs(viewer_class))
  File "/home/user/bin/taskcoach/taskcoachlib/patterns/metaclass.py", line 39, in __call__
    instance = super(NumberedInstances, cls).__call__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 877, in __init__
    super(TaskViewer, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 383, in __init__
    super(SortableViewerForTasksMixin, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 323, in __init__
    super(ManualOrderingMixin, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 208, in __init__
    super(SortableViewerMixin, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 703, in __init__
    super(ViewerWithColumns, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 136, in __init__
    super(BaseTaskTreeViewer, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 77, in __init__
    super(BaseTaskViewer, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/mixin.py", line 85, in __init__
    super(FilterableViewerMixin, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 583, in __init__
    super(TreeViewer, self).__init__(*args, **kwargs)
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 63, in __init__
    self.widget = self.createWidget()
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/task.py", line 912, in createWidget
    imageList = self.createImageList()  # Has side-effects
  File "/home/user/bin/taskcoach/taskcoachlib/gui/viewer/base.py", line 191, in createImageList
    imageList.Add(wx.ArtProvider_GetBitmap(image, wx.ART_MENU, size))
  File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/_gdi.py", line 6735, in Add
    return _gdi_.ImageList_Add(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "IsOk()" failed at /var/tmp/portage/x11-libs/wxGTK-3.0.2.0-r2/work/wxPython-src-3.0.2.0/src/gtk/bitmap.cpp(923) in GetWidth(): invalid bitmap

它还显示一个 GUI 错误消息:

IDAT: chunk data is too large
07:11:19: Couldn't load a PNG image - file is corrupted or not enough memory.
07:11:19: Unknown image data format.

我尝试重新编译 wxwidgets 和 wxpython(我使用 gentoo),从主目录中删除所有数据,然后从官方网站 taskcoach.org 再次下载。没有任何帮助。请帮助使其正常工作。

【问题讨论】:

  • 那个 png 图像可以吗?可以用其他应用阅读吗?
  • @Ural,你升级 png 库了吗?你升级系统了吗? GTK+?有一张关于阅读格式错误的 png 的罚单,但我相信它在很久以前就已修复。
  • 我找不到它请求的 png 图像。我认为它与应用程序一起提供并且一定没问题,因为应用程序的版本是相同的,我再次下载了它。 @igor,是的,我通常会更新系统,并且可能会收到一些更新,但通常更新是为了修复错误,而不是为了添加它们。我试图重新编译'emerge -av gtk+ pygtk libpng wxGTK wxpython',但它仍然失败......

标签: python wxpython wxwidgets assertions gtk2


【解决方案1】:

我找到了原因。 https://sourceforge.net/p/libpng/bugs/270/?limit=25

我将 libpng 降级到 1.6.29 并修复了问题。他们在 git 版本中也有修复,但仍然没有发布新版本。

libpng-1.6.32 尝试计算 pngrutil.c:png_check_chunk_length() 中 IDAT 块的最大合理大小,但似乎假设数据是由 zlib 或其他输出数据的“合理”压缩器生成的以最小的开销。然而,PNG 标准并没有(据我所知)包括任何这样的要求,事实上,https://www.w3.org/TR/PNG/ 第 15.2.3(k) 节规定符合标准的解码器必须“假设 [] 不超过完整图像数据由存储在一定数量的 IDAT 块中的单个压缩数据流表示。

已在 git branch libpng16 中修复,请测试。它为 IDAT 设置了更大的限制,允许每行放气缓冲区。此外,它使用 PNG_USER_CHUNK_MALLOC_MAX 用户限制,因此用户可以根据需要设置更大的限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多