On Tuesday 16 January 2007 12:11, Paul McNett wrote:
> johnf wrote:
> > On Tuesday 16 January 2007 11:35, Paul McNett wrote:
> >> johnf wrote:
> >>> import dabo
> >>> import johnsClasses
> >>>
> >>> Then within a form I could say something like
> >>> new_frm = johnsClasses.MydialogClass() #if this wrong say so please
> >>> new_frm.show()
> >>>
> >>> I was sure I was right - but it does not work.  I'm missing something
> >>> or coding something wrong.
> >>
> >> johnsClasses is a name in the main module's namespace. It exists only in
> >> that namespace. You need to explicitly import it into any other modules,
> >> for instance your form.
> >>
> >> I don't know how the imports for the cdxml files work, if there's one
> >> place where you can put them, but in any case it will work to just put
> >> an 'import johnsClasses' inside the form method where you want to
> >> instantiate that dialog.
> >
> > So then the proper place is to import in the "afterInitAll"  for each and
> > every form?  That seems wrong to me.  I'm back to where is my universal
> > way to get my classes into the app.
>
> Python imports into namespaces.
>
> > I'm still looking for "set classlib additive" and have access from any
> > form. So if I do place an import statement into each form will I end up
> > with multi copies of myclass in memory or just one?  As I currently
> > understand it python checks to see if the module is in memory and uses
> > it.  Is that right?
>
> Python doesn't reexecute already-imported modules, so that is right.
>
> > OK maybe I need to hand code this.  So would one you please provide a
> > simple hand coded example that opens a form, then calls a form from an
> > event or form function.  The form does not need to be anything special -
> > just a textbox with a button to call the second form.
>
> #-- Here it is all in one file:
>
> import dabo
>
> dabo.ui.loadUI("wx")
>
> class MyTestDialog(dabo.ui.dDialog):
>       pass
>
> class MyMainForm(dabo.ui.dForm):
>       def afterInit(self):
>               self.addObject(dabo.ui.dButton, Caption="Hit Me", 
> OnHit=self.onButtonHit)
>
>       def onButtonHit(self, evt):
>               dlg = MyTestDialog()
>               dlg.show()
>               dlg.release()
>
>
> if __name__ == "__main__":
>       app = dabo.dApp(MainFormClass=MyMainForm)
>       app.start()
>
> ## - end example one.
>
>
> In the following example, we split MyTestDialog and MyMainForm into
> their own files, so there are 3 files (main.py, MyTestDialog.py, and
> MyMainForm.py)
>
> ##- Begin main.py
> import dabo
> import MyMainForm
> app = dabo.dApp(MainFormClass=MyMainForm.MyMainForm)
> app.start()
> ##- End main.py
>
> ##- Begin MyTestDialog.py
> import dabo
>
> dabo.ui.loadUI("wx")
>
> class MyTestDialog(dabo.ui.dDialog):
>       pass
>
> ## - End MyTestDialog.py
>
> ## - Begin MyMainForm.py
> import dabo
> import MyTestDialog
>
> dabo.ui.loadUI("wx")
>
>
> class MyMainForm(dabo.ui.dForm):
>       def afterInit(self):
>               self.addObject(dabo.ui.dButton, Caption="Hit Me", 
> OnHit=self.onButtonHit)
>
>       def onButtonHit(self, evt):
>               dlg = MyTestDialog.MyTestDialog()
>               dlg.show()
>               dlg.release()
>
> ##- End MyMainForm.py
>
> Notice how each file needed to import stuff that may have been imported
> already in another of the files.
>
> > Added question:  Is there a utility that converts cdxml files to python
> > wxPthon code and allows me to save the code to a file?
>
> Not that I know of.


Thanks Paul - I'll play with this.  
Just to be sure I understand:
Somewhere in the:
app.MainFormClass = "custfrm1.cdxml"
app.setup()

the namespace gets changed and the global namespace of "main" is no longer 
available.  Right?  As I currently understand namespace there are only 
three - built-ins, global and local.   So it is possible to over ride the 
global.  IOW the Forms are a separate program to "main ".  Right?
-- 
John Fabiani

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev

Reply via email to