Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Please Hlp with msg: "The C++ part of the StaticText object has been deleted"

Reply
Thread Tools

Please Hlp with msg: "The C++ part of the StaticText object has been deleted"

 
 
python newbie
Guest
Posts: n/a
 
      09-26-2004
Hi,
I have a wxPython app which dump errors when I close it ( in
the debug output at bottom of Komodo, when I close my app. )

Where I got the code for my GUI:
Straight from the wxProject.py file which comes with the samples:
----
C:\Python23\Lib\site-packages\wx\samples\wxProject\wxProject.py ----

It basically consists of a splitterwindow, and I have a wxPanel
on the left side, which is set to a vertical box sizer. I used
the Add function of the sizer to simply add a wxStaticText control
at the very top.
The bottom half of this same left panel is a tree.
( u can ignore the *right* side of the splitter.. nothing exciting is
happening.. it's the same as in the wxProject.py sample ,
just a multilined edit contrl)

Anyway, when I click on a node of this tree, I change the text of the
static text control at top, to the text of the node. It actually works,
but when I close the app I get this:
----------------------------------------------
The stack trace:
E:\MyProjects1\python\backup
Traceback (most recent call last):
File "E:\MyProjects1\python\backup\wxProject.py", line 294, in
OnNodeChanged
self.testLab.SetLabel('test')
File "C:\Python23\Lib\site-packages\wx\_core.py", line 10617, in
__getattr__
raise PyDeadObjectError(self.attrStr % self._name)
wx._core.PyDeadObjectError: The C++ part of the StaticText object has been
deleted, attribute access no longer allowed.
---------------------------------------------


Here's how I add the wxStaticBox: ------------------------
# ok, first, the code below is actually in this __init__ function
class main_window(wxFrame):
def __init__(self, parent, id, title):
wxFrame.__init__(self, parent, -1, title, size = (650, 500),
style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_R ESIZE)

# first the left panel
# -------------------
self.MyLeftPanel = wxPanel(splitter,10004) #<--a random number I used
#
didn't want to use -1
self.MyLeftPanel.SetDimensions(0, 0, 100, 220)
self.leftSizer=wxBoxSizer(wxVERTICAL) # the sizer is born
self.MyLeftPanel.SetSizer(self.leftSizer)
self.MyLeftPanel.SetAutoLayout(true)

# then add the static text
# -------------------
self.aNewID=wxNewId()
self.testLabel = wxStaticText(self.MyLeftPanel,self.aNewID,'test label')
self.leftSizer.Add(self.testLabel)


Here's how I code the event handler: ------------------

def OnNodeChanged(self,event):
item = self.tree.GetSelection()
if (self.tree.ItemHasChildren(item) == 0):
#self.testLabel.SetLabel(self.tree.GetItemText(ite m))
self.testLabel.SetLabel('test')
# The commented-out line works too.. the static text does change
# to the static of the node --- very nice, if it weren't
# for the error when you close the app.

Any suggestions would be great.
-S

p.s.
Here's the kicker:
Try running C:\Python23\Lib\site-packages\wx\samples\wxProject\wxProject.py
yourself. (but first remove, say, the editor on the right side,
add a panel and a sizer,and then add a statictext control
and add a tree handler to set the label). And it will work
fine. No error dump when you close it!

I double and triple checked that I am doing the same thing as in the
original file. I don't want to dump my own py file, and start over
with the original sample file. i've written too much probably for that.

----------------------------
WX: wxPython WIN32-2.5.1.5
OS: Windows XP
PYTHON: From python.org, Version2.3



 
Reply With Quote
 
 
 
 
python newbie
Guest
Posts: n/a
 
      09-26-2004
Sorry about the two extra posts. Using Outlook Expr ( which told me it
didn't send it the first 2 times, though it did)


 
Reply With Quote
 
 
 
 
Mike C. Fletcher
Guest
Posts: n/a
 
      09-26-2004
wxPyDeadObjectError is a catch that prevents you from getting a core
dump/memory-access-violation when you try to call a method or access an
attribute of an object which has already been cleaned up/destroyed by
the system. wxPyDeadObject's evaluate to false, so you can do this:
if self.testLab:
self.testLab.SetLabel('test')
or you can just catch the error:

try:
self.testLab.SetLabel( 'test' )
except wx.PyDeadObjectError, err:
pass # just ignore it...

In this case, it looks like the event is occurring after the testLab
widget has been destroyed. Since you likely don't want to change the
appearance of it at that point, nothing is lost.

HTH,
Mike

python newbie wrote:
....

> File "E:\MyProjects1\python\backup\wxProject.py", line 294, in
>OnNodeChanged
> self.testLab.SetLabel('test')
> File "C:\Python23\Lib\site-packages\wx\_core.py", line 10617, in
>__getattr__
> raise PyDeadObjectError(self.attrStr % self._name)
>wx._core.PyDeadObjectError: The C++ part of the StaticText object has been
>deleted, attribute access no longer allowed.
>
>

....
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com

 
Reply With Quote
 
python newbie
Guest
Posts: n/a
 
      09-26-2004
Sounds like a plan. Did a google group search originally, and I couldn't
find this info you just provided, so thanks a lot.

"Mike C. Fletcher" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> wxPyDeadObjectError is a catch that prevents you from getting a core
> dump/memory-access-violation when you try to call a method or access an
> attribute of an object which has already been cleaned up/destroyed by the
> system. wxPyDeadObject's evaluate to false, so you can do this:
> if self.testLab:
> self.testLab.SetLabel('test')
> or you can just catch the error:
>
> try:
> self.testLab.SetLabel( 'test' )
> except wx.PyDeadObjectError, err:
> pass # just ignore it...
>
> In this case, it looks like the event is occurring after the testLab
> widget has been destroyed. Since you likely don't want to change the
> appearance of it at that point, nothing is lost.
>
> HTH,
> Mike
>
> python newbie wrote:
> ...
>
>> File "E:\MyProjects1\python\backup\wxProject.py", line 294, in
>>OnNodeChanged
>> self.testLab.SetLabel('test')
>> File "C:\Python23\Lib\site-packages\wx\_core.py", line 10617, in
>>__getattr__
>> raise PyDeadObjectError(self.attrStr % self._name)
>>wx._core.PyDeadObjectError: The C++ part of the StaticText object has been
>>deleted, attribute access no longer allowed.
>>

> ...
> ________________________________________________
> Mike C. Fletcher
> Designer, VR Plumber, Coder
> http://www.vrplumber.com
> http://blog.vrplumber.com
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
The printing has been stopped and this job has been add to the queu? dejola Computer Support 6 12-30-2005 03:26 AM
Please Hlp with msg:"The C++ part of the StaticText object has been deleted" Alex Nordhus Python 0 04-12-2005 04:36 PM
Please Hlp with msg: "The C++ part of the StaticText object has been deleted" python newbie Python 1 09-27-2004 10:49 PM
Please Hlp with msg: "The C++ part of the StaticText object has been deleted" StvB Python 2 09-26-2004 11:03 PM
REQ: how I can CENTER object (panel, statictext) on pages asp.net ??? Kasek ASP .Net 0 01-30-2004 02:14 AM



Advertisments