P
python newbie
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_RESIZE)
# 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(item))
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.
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_RESIZE)
# 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(item))
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.