EVT_TREE_SEL_CHANGED triggers chain of RuntimeError: wrapped c/c++ object of type <myTreeClass> has been deleted

49 views
Skip to first unread message

ignace danneels

unread,
Dec 4, 2016, 10:57:29 AM12/4/16
to wxPython-users
This is a first application I develop using wxPython.

I am using PyCharm as development tool. (don't know if this is relevant)

I wrote a class which depends on wx.TreeCtrl as shown below:

import wx


class ActTree(wx.TreeCtrl):
"""
Base class for all TreeCtrl items used in the program
"""
def __init__(self, parent, *args, **kwargs):
super().__init__(parent, *args, **kwargs)
self.parent = parent
self._app = wx.GetApp()
self._frame = self.getframe()
self.selected = None
self.selectionString = None
self._root = None
self.Bind(wx.EVT_TREE_SEL_CHANGED, self.newselection)

def newselection(self, event):
self.selected = event.GetItem()
self.selectionString = self.GetItemText(self.selected)
print('TREE_SEL_CHANGED in ActTree on {}'.format(self.selectionString))
event.Skip()

When I close the frame on which I'm using this class, I get a chain of
Traceback (most recent call last):
  File "D:\werkblad\SubVersion\Python\sact\pkg\classes\actTree.py", line 23, in newselection
    self.selectionString = self.GetItemText(self.selected)
RuntimeError: wrapped C/C++ object of type AccessTree has been deleted
Traceback (most recent call last):
  File "D:\werkblad\SubVersion\Python\sact\pkg\classes\actTree.py", line 23, in newselection
    self.selectionString = self.GetItemText(self.selected)
RuntimeError: wrapped C/C++ object of type AccessTree has been deleted

The class is used as a baseclass for other classes
class AccessTree(ActTree):
"""
Tree control reflecting access rights
"""
treecount = 0
self
.Bind(wx.EVT_TREE_SEL_CHANGED, self.selectRight)

where I had

def selectRight(self, event):
print(event.GetEventType())
item = event.GetItem()
print('TREE_SEL_CHANGED in accessTree on {}'.format(self.GetItemText(item)))

# item = event.GetItem()
# self._selectedRight = self._root
# self._rightKey = None
# if not item.IsOk():
# return
#
# parent = self.GetItemParent(item)
#
# if parent != self._root:
# self._rightKey = self.GetItemText(parent)
# self._selectedRight = self.GetItemText(item)

What happens is that when I close the window, I get like 9 triggers of this event (10198) and 8 RunTimeErrors.

Can anyone help me figure out what's wrong in my code. I've been trying to figure it out for days now and I'm at my end of the rope.
the version of wx I'm using:
3.0.3.dev2648+23be602 msw (phoenix)


Any suggestions are highly appreciated!
Reply all
Reply to author
Forward
0 new messages