(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