【问题标题】:How do I fix a "memory leak of type 'wxPyXmlSubclassFactory *', no destructor found" error from wxPython/wxFormBuilder?如何修复来自 wxPython/wxFormBuilder 的“'wxPyXmlSubclassFactory *' 类型的内存泄漏,未找到析构函数”错误?
【发布时间】:2014-03-17 00:50:19
【问题描述】:

我正在尝试关注this tutorial,以使用 wxPython 和 wxFormBuilder 快速制作简单的 GUI。

使用wxFormBuilder,我创建了一个超级简单的框架,一个垂直布局,一个编辑文本控件和一个按钮,它只清除文本控件的值。 WxFormBuilder 生成了 Python 代码,我只是添加了几行来在单击按钮时清除文本控件的值。这是愚蠢的简单框架的图像。

当我在 Python 中运行此文件时,GUI 会清除我在文本控件中键入的文本。当我点击 Frame 的关闭按钮时,我看到:

swig/python detected a memory leak of type 'wxPyXmlSubclassFactory *', no destructor found.

我尝试用谷歌搜索这个问题,但发现 Python 足够动态,不需要析构函数。我确实尝试添加 __del__ 函数,但我仍然收到相同的错误消息。

摆脱该错误的想法?我正在使用:

  • Python 2.7.6
  • wxPython 3.0.0.0 用于 Python 2.7
  • wxFormBuilder 3.4.2
  • Windows 7,32 位

非常感谢您!

如果有人需要,这是我的代码:

# -*- coding: utf-8 -*- 

###########################################################################
## Python code generated with wxFormBuilder (version Feb 26 2014)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################

import wx
import wx.xrc

###########################################################################
## Class MyFrame1
###########################################################################

class MyFrame1 ( wx.Frame ):

    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 203,155 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        bSizer1 = wx.BoxSizer( wx.VERTICAL )

        self.edit = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer1.Add( self.edit, 1, wx.ALL|wx.EXPAND, 5 )

        self.clearButton = wx.Button( self, wx.ID_ANY, u"Clear", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer1.Add( self.clearButton, 1, wx.ALL|wx.EXPAND, 5 )


        self.SetSizer( bSizer1 )
        self.Layout()

        self.Centre( wx.BOTH )

        # Connect Events
        self.clearButton.Bind( wx.EVT_BUTTON, self.clearFunc )

    def __del__( self ):
        pass


    # Virtual event handlers, overide them in your derived class
    def clearFunc( self, event ):
        event.Skip()

class SimpleFrame(MyFrame1):
    def __init__(self,parent):
        MyFrame1.__init__(self,parent)

    def clearFunc(self,event):
        self.edit.SetValue("")

app = wx.App(False)
frame = SimpleFrame(None)
frame.Show(True)
app.MainLoop()

【问题讨论】:

    标签: python wxpython wxformbuilder


    【解决方案1】:

    我在最新版本 (3.0.0) 中不断收到同样的错误。从那以后没有发布新版本。不过不用担心。预计很快就会看到修复。

    看看最后一个帖子here

    【讨论】:

    • “不用担心”是什么意思?我该如何解决? “python -W 忽略”不起作用
    • 我的意思是现在可以安全地忽略该错误。它的开发者 Robert Dunn 说他将在下一个版本之前创建一个适当的修复程序。 check this
    • 知道了:如果 Wxformbuilder 添加了“import wx.xrc”行,请删除它
    • 谢谢,user2963623!很高兴知道我不只是在做一些愚蠢的事情。感谢您对作者帖子的挖掘!
    • @graph 好提示。我要花很长时间才能找到它,但确实删除那条线就可以了。
    【解决方案2】:

    据我所知,这是 wxPython 的一个相当无害的错误,但听起来作者有一个可能已发布或未发布的修复:

    http://trac.wxwidgets.org/changeset/75542

    对 wxPython 了解不多,但查看 3.0.0 版本(12 月)和我刚刚链接的更改(1 月)的时间戳,看起来它可能不在您拥有的版本中.您是否尝试过更新 wxPython?最坏的情况是,如果您有勇气,可以尝试自己更改链接代码。祝你好运!

    【讨论】:

      猜你喜欢
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      相关资源
      最近更新 更多