(revisited thread from July 7):
http://leafe.com/archives/showFullThd/422649

Miguel Lopes wrote:
> The bulk of my application is hand coded, and I'm planing to use cdxml dForm
> (instantiated as Modal) to edit simple records.
> 
> I'm experimenting with such a form, but ran into a PyDeadObjectError
> exception that I can figure out how to avoid. his exception is significant
> since I can no longer reinstantiate the same form!
> 
> Here's my traceback:
> 
> Traceback (most recent call last):
>   File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dControlMixin.py",
> line 27, in _onWxHit
>     self.raiseEvent(dEvents.Hit, evt, *args, **kwargs)
>   File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
> line 949, in raiseEvent
>     super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args,
> **kwargs)
>   File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/lib/eventMixin.py",
> line 93, in raiseEvent
>     bindingFunction(event)
>   File
> "/Users/miguelek/Documents/programming/daboprgs/HandCoding_02/ui/appModules/AccountPages.py",
> line 160, in onEdit
>     frm.showForm(contactsForAccount, 'EditRec') #, parentPK, childPK
>   File "/var/folders/XN/XNKKbB+9EVeY1y0rXolJBE+++TI/-Tmp-/tmpLfCKRL.py",
> line 247, in showForm
>     self.show()
>   File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
> line 1282, in show
>     self.Visible = True
>   File
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dForm.py",
> line 964, in _setVisible
>     self._hackToFrame()
>   File
> "//usr/local/lib/wxPython-unicode-2.8.9.2/lib/python2.5/site-packages/wx-2.8-mac-unicode/wx/_core.py",
> line 14524, in __getattr__
>     raise PyDeadObjectError(self.attrStr % self._name)
> wx._core.PyDeadObjectError: The C++ part of the dForm_43298 object has been
> deleted, attribute access no longer allowed.
> 
> The "form" (dialog) class is created from the cdxml file in the normal way.
> Since I pass a bizobj to the dialog with the record to edit, I have my own
> method to show the form:
> 
> # This method lives in the dialog
> def showForm(self, contactsBizobj, usage):
> 
>     # set the forms Bizobj - this makes the form reusable for different
> origins
>     # of contacts (e.g. Children of account, children of opportunity, ...)
>     self.VCRactive = True
> 
>     self.addBizobj(contactsBizobj)
>     self.requery()
> 
>     if usage == 'NewRec':
> 
>         self.new()
> 
>     self.show()
> 
> #to close the form I just use close:
> ## *!* ## Dabo Code ID: dButton-dPanel-956
> def onHit(self, evt):
>     self.Form.close()
> 
> I suppose this is either a wxPython or a Dabo bug, since I'm not doing
> anything special here.
> 
> Platform: Mac
> Python Version: 2.5.4 on darwin
> Dabo Version: Version 0.9.2; Revision 5254M
> UI Version: 2.8.9.2 on wxMac

Does this patch fix it?

{{{
Index: dabo/ui/uiwx/dForm.py
===================================================================
--- dabo/ui/uiwx/dForm.py       (revision 5305)
+++ dabo/ui/uiwx/dForm.py       (working copy)
@@ -924,30 +924,30 @@
                                # This is a normal SDI form:
                                preClass = wx.PreFrame
                                self._mdi = False
-                       self._hackToFrame()
+                       dForm._hackToFrame()

                ## (Note that it is necessary to run the above blocks each 
time, because
                ##  we are modifying the dForm class definition globally.)
                BaseForm.__init__(self, preClass, parent, properties, 
attProperties, 
*args, **kwargs)
-               self._hackToFrame()
+               dForm._hackToFrame()


        def _hackToDialog(self):
                dForm.__bases__ = (BaseForm, wx.Dialog)

-       def _hackToFrame(self):
-               if self._mdi:
+       def _hackToFrame(cls):
+               if dabo.settings.MDI:
                        dForm.__bases__ = (BaseForm, wx.MDIChildFrame)
                else:
                        dForm.__bases__ = (BaseForm, wx.Frame)
+       _hackToFrame = classmethod(_hackToFrame)

-
        def Show(self, show=True, *args, **kwargs):
                self._gtk_show_fix(show)
                if self.Modal:
                        self._hackToDialog()
                dForm.__bases__[-1].Show(self, show, *args, **kwargs)
-               self._hackToFrame()
+               dForm._hackToFrame()

        def _getModal(self):
                return getattr(self, "_modal", False)
@@ -961,7 +961,7 @@
                        if val and self.Modal:
                                self._hackToDialog()
                                self.ShowModal()
-                               self._hackToFrame()
+                               dForm._hackToFrame()
                        else:
                                self.Show(val)
                else:

}}}


Paul


_______________________________________________
Post Messages to: Dabo-users@leafe.com
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message: http://leafe.com/archives/byMID/4a771816.2030...@ulmcnett.com

Reply via email to