Method-call and sizer-problem

Hello everybody!

My name is Jens Petersen and I am a student in mechanical engineering in
Flensburg (in the very north of germany!)

So at first: Sorry for my english, I hope you will understand!

At the moment, I am writing my diploma-thesis and a part of it is to be
programmed in ‘python’!

But there are some problems if you don’t know anybody who knows python very
well, so I hope you can help me!

I have two problems at the moment!

1.: I can’t insert my fields into the sizers!
2.: I need to give some values to a method, but I don’t know how!

Further, there are some things which could be nicer, e.g. my tables don’t
look very good because there are always these Scroll-Controls. Is it
possible to fit the table without these controls.
And the whole layout doesn’t look good, too.
If you’d like to help me, please explain or show me, how to use anchors
etc..

Please look at the code, my doc-strings explain my problems!

[python]
import wx
import wx.stc
import math
import wx.lib.scrolledpanel as scrolled
import wx.lib.masked.numctrl
from wx.lib.anchors import LayoutAnchors
import wx.grid
import pickle
class Schnelleingabe(scrolled.ScrolledPanel):
    def __init__(self, parent):
        scrolled.ScrolledPanel.__init__(self, id=-1, name='PanelName',
parent=parent, size=(700,500))
        """
        This Panel should be as variabel as possible. For the different
types of
        parameters there are different ways to init them:
        Numbers:
('ParameterName','Num','Group',Value,Minimum,Maximun,Limited,Precision(ints
after dot),ints before dot,'Unit')
        Group means, that parameters of one group are shown side by side,
not as usually one below the other
        Strings: ('ParameterName','Str')
        Spacer: ('ParameterName','Spa') - ParameterName may be '', is not
used
        Combobox: ('ParameterName','Com',Value,[Choices])
        Dates: ('ParameterName','Dat')
        Tables: ('ParameterName','Tab',Design,Rows,Columns,Columntitles)
        Design is for later! Still unused
        """
        ListParameter=[
            ('number 1','Num','TestGroup',0,0,99999,False,0,5,''),
            ('name','Str'),
            ('str2','Str'),
            ('number
2','Num','TestGroup',210000,0,500000,False,0,7,'[MPa]'),
            ('number3','Num',None,0.3,-1,0.5,True,2,1,'[]'),
            ('Temperature','Num',None,23,-273,999,True,0,3,'[°C]'),
            ('number4','Num',None,0,0,1500,False,2,4,'[N/mm²]'),
            ('str3','Str'),
            ('Date1','Dat'),
            ('','Spa'),
            ('combobox1','Com','c',['a','b','c']),
            ('str4','Str'),
            ('date2','Dat'),
            ('combobox2','Com','',['','','']),
           
('Tabletest_a','Tab',5,7,3,[(0,"header1"),(1,"header2"),(2,"header3"),(3,'header4')]),
           
('Tabletest_b','Tab',5,7,3,[(0,"header1_b"),(1,"header2_b"),(2,"header3_b"),(3,'header4_b')]),
            ]
        """
        You see, that 'number 1' and 'number 2' are in the same group, so
they schould be shown side by side
        """
        self.EnteredParameter={}
        """Dict to keep the Parameters catchable"""
        self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=-1, vgap=0)
        self.PartSizer={}
        self.GroupSizer={}
        """Dicts zo save the Sizer of Parameters and Groups"""
        self.TabIndex={}
        """
        Saves, how many Tables e.g. for 'Tabletest_a' exist, every
Table-Parameter may have several tables!
        """
        for Parameters in ListParameter:
            ParameterName=Parameters[0]
            Art=Parameters[1]
            if Art=='Num':
                Group=Parameters[2]
                Wert=Parameters[3]
                Min=Parameters[4]
                Max=Parameters[5]
                Limited=Parameters[6]
                Precicion=Parameters[7]
                IntegerWidth=Parameters[8]
                Unit=Parameters[9]
                self.EnterBox=wx.lib.masked.numctrl.NumCtrl(id = -1,
                 name=ParameterName, parent=self,
                 size=wx.Size(40, 21), style=0, value=Wert, min = Min, max =
Max,
                 limited =
Limited,fractionWidth=Precicion,integerWidth=IntegerWidth,groupDigits=False,
                 allowNone = False, allowNegative = True)
                self.Label=wx.StaticText(id=-1,
                 label=ParameterName+' '+Unit, name='Label'+ParameterName,
                 parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                if Group==None:
                    """
                    If this parameter has no group, it is shown under the
other
                    paramerts, the parameter-label is shown on the left side
of
                    the control-box
                    """
                    self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                    self.PartSizer[ParameterName].Add(self.Label, 2,
border=1, flag=0)
                    self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                    self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
                else:
                    """
                    if a group is given, the Label is schown above the
                    control-box, and the parameter is placed side by side
other
                    parameters of the same group
                    """
                    self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.VERTICAL)
                    self.PartSizer[ParameterName].Add(self.Label, 2,
border=1, flag=0)
                    self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                    self.GroupSizer[Group] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                   
self.GroupSizer[Group].Add(self.PartSizer[ParameterName], 2, border=1,
flag=0)
                    self.GroupSizer[Group].Layout()
                    self.MainSizer.Add(self.GroupSizer[Group], 2, border=1,
flag=0)
            elif Art=='Str':
                self.EnterBox=wx.TextCtrl(id=-1, name=ParameterName,
                    parent=self, size=wx.Size(100, 21),
                    style=0, value='please enter')
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Spa':
                self.PartSizer[ParameterName] =(20,20)
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Dat':
                self.EnterBox=wx.DatePickerCtrl(self, size=(100,-1),
                                style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Com':
                Wert=Parameters[2]
                Auswahl=Parameters[3]
                self.EnterBox=wx.ComboBox(choices=Auswahl,
                    id=-1, name=ParameterName, parent=self,
                    size=wx.Size(35, 21), style=0, value=Wert)
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Tab':
                self.TabIndex[ParameterName]=1
                self.TabSizer={}
                ID_ANOTHERRATE={}
                self.AnotherRate={}
                TableName=ParameterName+str(self.TabIndex[ParameterName])
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.VERTICAL)
                self.TabSizer[TableName] = wx.FlexGridSizer(cols=2, hgap=0,
rows=1, vgap=0)
                Design=Parameters[2]
                Rows=Parameters[3]
                Cols=Parameters[4]
                Header=Parameters[5]
                self.EnterBox={}
                self.Label={}
                self.EnterBox[TableName] = wx.grid.Grid(id=-1,
name=ParameterName,
                    parent=self, style=wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
                self.EnterBox[TableName].CreateGrid(Rows,Cols)
                for col in xrange(0,Cols):
                    for row in xrange(0,Rows):
                        self.EnterBox[TableName].SetCellEditor(row, col,
wx.grid.GridCellFloatEditor(8,4))
                       
self.EnterBox[TableName].SetCellValue(row,col,'%s'%self.TabIndex[ParameterName])
   
                for col, header in Header:
                    self.EnterBox[TableName].SetColLabelValue(col,header)
                self.Label[TableName]=wx.StaticText(id=-1,
label=ParameterName+' %s instanzierung'%self.TabIndex[ParameterName],
                    name='Label'+ParameterName, parent=self,
                    size=wx.Size(158, 13),style=0)
                ID_ANOTHERRATE[ParameterName]=wx.NewId()
                self.AnotherRate[ParameterName] =
wx.Button(id=ID_ANOTHERRATE[ParameterName],
                    label='Another Rate?', name='ANOTHERRATE', parent=self,
size=wx.Size(75, 23), style=0)
                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab,
id=ID_ANOTHERRATE[ParameterName])
                """
                This here is my biggest problem!!!
                From here I'd like to call the method 'self.OnAnotherTab',
                but I need the value of 'ParameterName' in the method!
                Why doesn't it work this way:
                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab(self,
bez=ParameterName), id=ID_ANOTHERRATE[ParameterName])
                """
                self.TabSizer[TableName].Add(self.Label[TableName], 2,
border=1, flag=0)
                self.TabSizer[TableName].Add(self.EnterBox[TableName], 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Add(self.TabSizer[TableName],
2, border=1, flag=0)
               
self.PartSizer[ParameterName].Add(self.AnotherRate[ParameterName], 2,
border=1, flag=0)
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
        ID_SCHNELLEINGABEWRITE=wx.NewId()
        self.Write = wx.Button(id=ID_SCHNELLEINGABEWRITE, label='Write
*.xyz-file',
              name='Write', parent=self, pos=wx.Point(8, 680),
size=wx.Size(720,
              48), style=0)
        self.Write.Bind(wx.EVT_BUTTON, self.OnWriteButton,
id=ID_SCHNELLEINGABEWRITE)
        self.textEditor = wx.stc.StyledTextCtrl(id=-1,
              name='styledTextCtrl1', parent=self, pos=wx.Point(8,750),
              size=wx.Size(720, 100), style=0)
        self.textEditor.SetScrollWidth(680)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.MainSizer, 0, border=5, flag=0)
        vbox.Add(self.Write, 0, border=5, flag=0)
        vbox.Add(self.textEditor, 0, border=5, flag=0)
        Schnelleingabe.SetSizer(self, vbox )
        Schnelleingabe.SetAutoLayout(self, 1)
        self.SetupScrolling()
    def OnWriteButton(self, event):
        """
        This method works, that's why I don't show it here!
        """
        event.skip()
    def OnAnotherTab(self, evt):
        """
        This method should create another table for the 'ParameterName' by
        clicking on the button 'Another rate?'.
        Later this table should be inserted between the table before and the
button!
        But because it dosen't work yet, I just try to add it after the
button...
        """
        ParameterName='Tabletest_a'
        """
        Because of the problem, that I can't give the 'ParameterName' to
this
        method, I try to use 'Tabletest_a'!
        But this error-massage is shown:
        Traceback (most recent call last):
        File "D:\Panel.py", line 281, in OnAnotherTab
        self.PartSizer[ParameterName].Add(self.TabSizer[TableName], 2,
border=1, flag=0)
        File "C:\Python23\Lib\site-packages\wx-2.5.4-msw-ansi\wx\_core.py",
line 11263, in __getattr__
        raise PyDeadObjectError(self.attrStr % self._name)
        wx._core.PyDeadObjectError: The C++ part of the BoxSizer object has
been deleted, attribute access no longer allowed.
        self.PartSizer['Tabletest_a'] is existing! Where is my mistake???
        """
        self.TabIndex[ParameterName]+=1
        TableName=ParameterName+str(self.TabIndex[ParameterName])
        self.TabSizer[TableName] = wx.FlexGridSizer(cols=2, hgap=0, rows=1,
vgap=0)
        self.EnterBox[TableName] = wx.grid.Grid(id=-1, name=ParameterName,
            parent=self, style=wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        self.EnterBox[TableName].CreateGrid(7,5)
        for col in xrange(0,5):
            for row in xrange(0,7):
                self.EnterBox[TableName].SetCellEditor(row, col,
wx.grid.GridCellFloatEditor(8,4))
               
self.EnterBox[TableName].SetCellValue(row,col,'%s'%self.TabIndex[ParameterName])
     
        self.Label[TableName]=wx.StaticText(id=-1,label=ParameterName+' %s
daddel Function'%self.TabIndex[ParameterName],
                    name='Label'+ParameterName,
            parent=self, size=wx.Size(108, 13), style=0)
        self.TabSizer[TableName].Add(self.Label[TableName], 2, border=1,
flag=0)
        self.TabSizer[TableName].Add(self.EnterBox[TableName], 2, border=1,
flag=0)
        self.PartSizer[ParameterName].Add(self.TabSizer[TableName], 2,
border=1, flag=0)

methodcallandsizerprob.txt (18.7 KB)

···

#----------------------------------------------------------------------
class WorkingArea(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        self.parent=parent
        vbox = wx.BoxSizer(wx.VERTICAL)
        desc = wx.StaticText(self, -1,
                            "Testtext \n"
                            "Blablabla"
                            )
        desc.SetForegroundColour("Blue")
        vbox.Add(desc, 0, wx.ALIGN_LEFT|wx.ALL, 5)
        vbox.Add(wx.StaticLine(self, -1, size=(700,-1)), 0, wx.ALL, 5)
        vbox.Add((20,20))
        self.panel1=Schnelleingabe(self)
        self.FLexGrid1 = wx.FlexGridSizer(cols=1, vgap=4, hgap=4)
                
        self.panel1.SetSizer( self.FLexGrid1 )
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add((20,20))
        hbox.Add(self.panel1, 0, wx.FIXED_MINSIZE)
        hbox.Add((40, 10))
        vbox.Add(hbox, 0)
        self.SetSizer(vbox)
#----------------------------------------------------------------------
class MainWindow(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'MainWindow' , pos=(50,50),
                        style=wx.DEFAULT_FRAME_STYLE|wx.MAXIMIZE)
        self.CreateStatusBar()
        menuBar = wx.MenuBar()
        menu = wx.Menu()
        menu.Append(8998, "&Exit\tAlt-X", "Exit demo")
        menu.Append(8999, "&Save\tCtrl-s", "Save")
        menu.Append(8997, '&Write *.zyx\tCtrl+I',"Save material-set")
        menu.Append(8996, '&MainMenu\tCtrl+B',"back to main-menu")
        self.Bind(wx.EVT_MENU, self.OnExitApp, id=8998)
        self.Bind(wx.EVT_MENU, self.OnSaveApp, id=8999)
        self.Bind(wx.EVT_MENU, self.OnWriteINP, id=8997)
        self.Bind(wx.EVT_MENU, self.OnMainMenu, id=8996)
        menuBar.Append(menu, "&File")
        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
        MainWindow.window = WorkingArea(self)
    def OnExitApp(self, evt):
        MainWindow.Close(self)
    def OnCloseFrame(self, evt):
        evt.Skip()
    def OnSaveApp(self, evt):
                                                                            
        dlg = wx.FileDialog(self.window, "Save file as", ".", "", "*.xyz",
wx.SAVE|wx.OVERWRITE_PROMPT)
        try:
            if dlg.ShowModal() == wx.ID_OK:
                filename = dlg.GetPath()
                a={}
                a['Tables']=len(self.window.tablestore)
                for z in xrange(0,len(self.window.tablestore)):
                    for x in xrange(0,self.window.tablestore[z-1].i):
                        for y in xrange(0,self.window.tablestore[z-1].j):
                           
a['text',z,x,y]=self.window.tablestore[z-1].tabelle.GetCellValue(x,y)
    
                f=open(filename, "w")
                f.write('Test')
                f.write("\n")
                f.write(filename)
                f.write("\n\n")
                pickle.dump(a,f)
                f.close()
                self.FileName=filename
                self.SetTitle(('MatProg xyz123 - %s') % filename)
        finally:
            dlg.Destroy()
    def OnWriteINP(self, evt):
        evt.Skip()
    """
    Still in development:
    def OnOpenApp(self, evt):
        dlg = wx.FileDialog(self.window, "Save file as", ".", "", "*.xyz",
wx.SAVE|wx.OVERWRITE_PROMPT)
        try:
            if dlg.ShowModal() == wx.ID_OK:
                filename = dlg.GetPath()
                a={}
                a['Tables']=len(self.window.tablestore)
                for z in xrange(0,len(self.window.tablestore)):
                    for x in xrange(0,self.window.tablestore[z-1].i):
                        for y in xrange(0,self.window.tablestore[z-1].j):
                           
self.window.tablestore[z-1].tabelle.SetCellValue(a['text',z,x,y],x,y)
                            print a['text',z,x,y]
                f=open(filename, "w")
                f.write('Test')
                f.write("\n")
                f.write(filename)
                f.write("\n\n")
                pickle.dump(a,f)
                f.close()
                self.FileName=filename
                #self.SetTitle(('MatProg xyz123 - %s') % filename)
        finally:
            dlg.Destroy()
    """
    def OnMainMenu(self,evt):
        self.window.Show(False)
        self.window = WorkingArea(self)
        self.window.Show(True)
        frame=MainWindow()
        frame.Show(True)
        MyApp.SetTopWindow(frame)
#----------------------------------------------------------------------
class MyApp(wx.App):
    def OnInit(self):
        frame=MainWindow()
        frame.Show(True)
        self.SetTopWindow(frame)
        return True
#----------------------------------------------------------------------
def main():
    app = MyApp()
    app.MainLoop()
if __name__ == '__main__':
    main()
[\python]

It would be very nice, if anybody could help me!

Thank you!

Please ask me, if you don’t know, what I mean!

--
Jens Petersen

Geschenkt: 3 Monate GMX ProMail gratis + 3 Ausgaben stern gratis
++ Jetzt anmelden & testen ++ http://www.gmx.net/de/go/promail ++

Jens,

1.: I can't insert my fields into the sizers!

Can you pinpoint which part of the code you're talking about ?

2.: I need to give some values to a method, but I don't know how!

What do you mean ? pass values ?

.... Further, there are some things which could be nicer, e.g. my tables

don't ...
which tables the grids ?

···

On Tuesday 14 June 2005 01:59 pm, Jens Petersen wrote:

Hello everybody!

My name is Jens Petersen and I am a student in mechanical engineering in
Flensburg (in the very north of germany!)

So at first: Sorry for my english, I hope you will understand!

At the moment, I am writing my diploma-thesis and a part of it is to be
programmed in ‘python’!

But there are some problems if you don’t know anybody who knows python very
well, so I hope you can help me!

I have two problems at the moment!

1.: I can’t insert my fields into the sizers!
2.: I need to give some values to a method, but I don’t know how!

Further, there are some things which could be nicer, e.g. my tables don’t
look very good because there are always these Scroll-Controls. Is it
possible to fit the table without these controls.
And the whole layout doesn’t look good, too.
If you’d like to help me, please explain or show me, how to use anchors
etc..

Please look at the code, my doc-strings explain my problems!

[python]
import wx
import wx.stc
import math
import wx.lib.scrolledpanel as scrolled
import wx.lib.masked.numctrl
from wx.lib.anchors import LayoutAnchors
import wx.grid
import pickle
class Schnelleingabe(scrolled.ScrolledPanel):
    def __init__(self, parent):
        scrolled.ScrolledPanel.__init__(self, id=-1, name='PanelName',
parent=parent, size=(700,500))
        """
        This Panel should be as variabel as possible. For the different
types of
        parameters there are different ways to init them:
        Numbers:
('ParameterName','Num','Group',Value,Minimum,Maximun,Limited,Precision(ints
after dot),ints before dot,'Unit')
        Group means, that parameters of one group are shown side by side,
not as usually one below the other
        Strings: ('ParameterName','Str')
        Spacer: ('ParameterName','Spa') - ParameterName may be '', is not
used
        Combobox: ('ParameterName','Com',Value,[Choices])
        Dates: ('ParameterName','Dat')
        Tables: ('ParameterName','Tab',Design,Rows,Columns,Columntitles)
        Design is for later! Still unused
        """
        ListParameter=[
            ('number 1','Num','TestGroup',0,0,99999,False,0,5,''),
            ('name','Str'),
            ('str2','Str'),
            ('number
2','Num','TestGroup',210000,0,500000,False,0,7,'[MPa]'),
            ('number3','Num',None,0.3,-1,0.5,True,2,1,''),
            ('Temperature','Num',None,23,-273,999,True,0,3,'[°C]'),
            ('number4','Num',None,0,0,1500,False,2,4,'[N/mm²]'),
            ('str3','Str'),
            ('Date1','Dat'),
            ('','Spa'),
            ('combobox1','Com','c',['a','b','c']),
            ('str4','Str'),
            ('date2','Dat'),
            ('combobox2','Com','',['','','']),

('Tabletest_a','Tab',5,7,3,[(0,"header1"),(1,"header2"),(2,"header3"),(3,'h
eader4')]),

('Tabletest_b','Tab',5,7,3,[(0,"header1_b"),(1,"header2_b"),(2,"header3_b")
,(3,'header4_b')]), ]
        """
        You see, that 'number 1' and 'number 2' are in the same group, so
they schould be shown side by side
        """
        self.EnteredParameter={}
        """Dict to keep the Parameters catchable"""
        self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=-1, vgap=0)
        self.PartSizer={}
        self.GroupSizer={}
        """Dicts zo save the Sizer of Parameters and Groups"""
        self.TabIndex={}
        """
        Saves, how many Tables e.g. for 'Tabletest_a' exist, every
Table-Parameter may have several tables!
        """
        for Parameters in ListParameter:
            ParameterName=Parameters[0]
            Art=Parameters[1]
            if Art=='Num':
                Group=Parameters[2]
                Wert=Parameters[3]
                Min=Parameters[4]
                Max=Parameters[5]
                Limited=Parameters[6]
                Precicion=Parameters[7]
                IntegerWidth=Parameters[8]
                Unit=Parameters[9]
                self.EnterBox=wx.lib.masked.numctrl.NumCtrl(id = -1,
                 name=ParameterName, parent=self,
                 size=wx.Size(40, 21), style=0, value=Wert, min = Min, max
= Max,
                 limited =
Limited,fractionWidth=Precicion,integerWidth=IntegerWidth,groupDigits=False
, allowNone = False, allowNegative = True)
                self.Label=wx.StaticText(id=-1,
                 label=ParameterName+' '+Unit, name='Label'+ParameterName,
                 parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                if Group==None:
                    """
                    If this parameter has no group, it is shown under the
other
                    paramerts, the parameter-label is shown on the left
side of
                    the control-box
                    """
                    self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                    self.PartSizer[ParameterName].Add(self.Label, 2,
border=1, flag=0)
                    self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                    self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
                else:
                    """
                    if a group is given, the Label is schown above the
                    control-box, and the parameter is placed side by side
other
                    parameters of the same group
                    """
                    self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.VERTICAL)
                    self.PartSizer[ParameterName].Add(self.Label, 2,
border=1, flag=0)
                    self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                    self.GroupSizer[Group] =
wx.BoxSizer(orient=wx.HORIZONTAL)

self.GroupSizer[Group].Add(self.PartSizer[ParameterName], 2, border=1,
flag=0)
                    self.GroupSizer[Group].Layout()
                    self.MainSizer.Add(self.GroupSizer[Group], 2, border=1,
flag=0)
            elif Art=='Str':
                self.EnterBox=wx.TextCtrl(id=-1, name=ParameterName,
                    parent=self, size=wx.Size(100, 21),
                    style=0, value='please enter')
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Spa':
                self.PartSizer[ParameterName] =(20,20)
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Dat':
                self.EnterBox=wx.DatePickerCtrl(self, size=(100,-1),
                                style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Com':
                Wert=Parameters[2]
                Auswahl=Parameters[3]
                self.EnterBox=wx.ComboBox(choices=Auswahl,
                    id=-1, name=ParameterName, parent=self,
                    size=wx.Size(35, 21), style=0, value=Wert)
                self.Label=wx.StaticText(id=-1,
                    label=ParameterName, name='Label'+ParameterName,
                    parent=self, size=wx.Size(108, 13), style=0)
                self.EnteredParameter[ParameterName]=self.EnterBox
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.HORIZONTAL)
                self.PartSizer[ParameterName].Add(self.Label, 2, border=1,
flag=0)
                self.PartSizer[ParameterName].Add(self.EnterBox, 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Layout()
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
            elif Art=='Tab':
                self.TabIndex[ParameterName]=1
                self.TabSizer={}
                ID_ANOTHERRATE={}
                self.AnotherRate={}
                TableName=ParameterName+str(self.TabIndex[ParameterName])
                self.PartSizer[ParameterName] =
wx.BoxSizer(orient=wx.VERTICAL)
                self.TabSizer[TableName] = wx.FlexGridSizer(cols=2, hgap=0,
rows=1, vgap=0)
                Design=Parameters[2]
                Rows=Parameters[3]
                Cols=Parameters[4]
                Header=Parameters[5]
                self.EnterBox={}
                self.Label={}
                self.EnterBox[TableName] = wx.grid.Grid(id=-1,
name=ParameterName,
                    parent=self, style=wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
                self.EnterBox[TableName].CreateGrid(Rows,Cols)
                for col in xrange(0,Cols):
                    for row in xrange(0,Rows):
                        self.EnterBox[TableName].SetCellEditor(row, col,
wx.grid.GridCellFloatEditor(8,4))

self.EnterBox[TableName].SetCellValue(row,col,'%s'%self.TabIndex[ParameterN
ame])

                for col, header in Header:
                    self.EnterBox[TableName].SetColLabelValue(col,header)
                self.Label[TableName]=wx.StaticText(id=-1,
label=ParameterName+' %s instanzierung'%self.TabIndex[ParameterName],
                    name='Label'+ParameterName, parent=self,
                    size=wx.Size(158, 13),style=0)
                ID_ANOTHERRATE[ParameterName]=wx.NewId()
                self.AnotherRate[ParameterName] =
wx.Button(id=ID_ANOTHERRATE[ParameterName],
                    label='Another Rate?', name='ANOTHERRATE', parent=self,
size=wx.Size(75, 23), style=0)
                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab,
id=ID_ANOTHERRATE[ParameterName])
                """
                This here is my biggest problem!!!
                From here I'd like to call the method 'self.OnAnotherTab',
                but I need the value of 'ParameterName' in the method!
                Why doesn't it work this way:
                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab(self,
bez=ParameterName), id=ID_ANOTHERRATE[ParameterName])
                """
                self.TabSizer[TableName].Add(self.Label[TableName], 2,
border=1, flag=0)
                self.TabSizer[TableName].Add(self.EnterBox[TableName], 2,
border=1, flag=0)
                self.PartSizer[ParameterName].Add(self.TabSizer[TableName],
2, border=1, flag=0)

self.PartSizer[ParameterName].Add(self.AnotherRate[ParameterName], 2,
border=1, flag=0)
                self.MainSizer.Add(self.PartSizer[ParameterName], 2,
border=1, flag=0)
        ID_SCHNELLEINGABEWRITE=wx.NewId()
        self.Write = wx.Button(id=ID_SCHNELLEINGABEWRITE, label='Write
*.xyz-file',
              name='Write', parent=self, pos=wx.Point(8, 680),
size=wx.Size(720,
              48), style=0)
        self.Write.Bind(wx.EVT_BUTTON, self.OnWriteButton,
id=ID_SCHNELLEINGABEWRITE)
        self.textEditor = wx.stc.StyledTextCtrl(id=-1,
              name='styledTextCtrl1', parent=self, pos=wx.Point(8,750),
              size=wx.Size(720, 100), style=0)
        self.textEditor.SetScrollWidth(680)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.MainSizer, 0, border=5, flag=0)
        vbox.Add(self.Write, 0, border=5, flag=0)
        vbox.Add(self.textEditor, 0, border=5, flag=0)
        Schnelleingabe.SetSizer(self, vbox )
        Schnelleingabe.SetAutoLayout(self, 1)
        self.SetupScrolling()
    def OnWriteButton(self, event):
        """
        This method works, that's why I don't show it here!
        """
        event.skip()
    def OnAnotherTab(self, evt):
        """
        This method should create another table for the 'ParameterName' by
        clicking on the button 'Another rate?'.
        Later this table should be inserted between the table before and
the button!
        But because it dosen't work yet, I just try to add it after the
button...
        """
        ParameterName='Tabletest_a'
        """
        Because of the problem, that I can't give the 'ParameterName' to
this
        method, I try to use 'Tabletest_a'!
        But this error-massage is shown:
        Traceback (most recent call last):
        File "D:\Panel.py", line 281, in OnAnotherTab
        self.PartSizer[ParameterName].Add(self.TabSizer[TableName], 2,
border=1, flag=0)
        File "C:\Python23\Lib\site-packages\wx-2.5.4-msw-ansi\wx\_core.py",
line 11263, in __getattr__
        raise PyDeadObjectError(self.attrStr % self._name)
        wx._core.PyDeadObjectError: The C++ part of the BoxSizer object has
been deleted, attribute access no longer allowed.
        self.PartSizer['Tabletest_a'] is existing! Where is my mistake???
        """
        self.TabIndex[ParameterName]+=1
        TableName=ParameterName+str(self.TabIndex[ParameterName])
        self.TabSizer[TableName] = wx.FlexGridSizer(cols=2, hgap=0, rows=1,
vgap=0)
        self.EnterBox[TableName] = wx.grid.Grid(id=-1, name=ParameterName,
            parent=self, style=wx.STATIC_BORDER | wx.TAB_TRAVERSAL)
        self.EnterBox[TableName].CreateGrid(7,5)
        for col in xrange(0,5):
            for row in xrange(0,7):
                self.EnterBox[TableName].SetCellEditor(row, col,
wx.grid.GridCellFloatEditor(8,4))

self.EnterBox[TableName].SetCellValue(row,col,'%s'%self.TabIndex[ParameterN
ame])

        self.Label[TableName]=wx.StaticText(id=-1,label=ParameterName+' %s
daddel Function'%self.TabIndex[ParameterName],
                    name='Label'+ParameterName,
            parent=self, size=wx.Size(108, 13), style=0)
        self.TabSizer[TableName].Add(self.Label[TableName], 2, border=1,
flag=0)
        self.TabSizer[TableName].Add(self.EnterBox[TableName], 2, border=1,
flag=0)
        self.PartSizer[ParameterName].Add(self.TabSizer[TableName], 2,
border=1, flag=0)
#----------------------------------------------------------------------
class WorkingArea(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        self.parent=parent
        vbox = wx.BoxSizer(wx.VERTICAL)
        desc = wx.StaticText(self, -1,
                            "Testtext \n"
                            "Blablabla"
                            )
        desc.SetForegroundColour("Blue")
        vbox.Add(desc, 0, wx.ALIGN_LEFT|wx.ALL, 5)
        vbox.Add(wx.StaticLine(self, -1, size=(700,-1)), 0, wx.ALL, 5)
        vbox.Add((20,20))
        self.panel1=Schnelleingabe(self)
        self.FLexGrid1 = wx.FlexGridSizer(cols=1, vgap=4, hgap=4)

        self.panel1.SetSizer( self.FLexGrid1 )
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add((20,20))
        hbox.Add(self.panel1, 0, wx.FIXED_MINSIZE)
        hbox.Add((40, 10))
        vbox.Add(hbox, 0)
        self.SetSizer(vbox)
#----------------------------------------------------------------------
class MainWindow(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'MainWindow' , pos=(50,50),
                        style=wx.DEFAULT_FRAME_STYLE|wx.MAXIMIZE)
        self.CreateStatusBar()
        menuBar = wx.MenuBar()
        menu = wx.Menu()
        menu.Append(8998, "&Exit\tAlt-X", "Exit demo")
        menu.Append(8999, "&Save\tCtrl-s", "Save")
        menu.Append(8997, '&Write *.zyx\tCtrl+I',"Save material-set")
        menu.Append(8996, '&MainMenu\tCtrl+B',"back to main-menu")
        self.Bind(wx.EVT_MENU, self.OnExitApp, id=8998)
        self.Bind(wx.EVT_MENU, self.OnSaveApp, id=8999)
        self.Bind(wx.EVT_MENU, self.OnWriteINP, id=8997)
        self.Bind(wx.EVT_MENU, self.OnMainMenu, id=8996)
        menuBar.Append(menu, "&File")
        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_CLOSE, self.OnCloseFrame)
        MainWindow.window = WorkingArea(self)
    def OnExitApp(self, evt):
        MainWindow.Close(self)
    def OnCloseFrame(self, evt):
        evt.Skip()
    def OnSaveApp(self, evt):

        dlg = wx.FileDialog(self.window, "Save file as", ".", "", "*.xyz",
wx.SAVE|wx.OVERWRITE_PROMPT)
        try:
            if dlg.ShowModal() == wx.ID_OK:
                filename = dlg.GetPath()
                a={}
                a['Tables']=len(self.window.tablestore)
                for z in xrange(0,len(self.window.tablestore)):
                    for x in xrange(0,self.window.tablestore[z-1].i):
                        for y in xrange(0,self.window.tablestore[z-1].j):

a['text',z,x,y]=self.window.tablestore[z-1].tabelle.GetCellValue(x,y)

                f=open(filename, "w")
                f.write('Test')
                f.write("\n")
                f.write(filename)
                f.write("\n\n")
                pickle.dump(a,f)
                f.close()
                self.FileName=filename
                self.SetTitle(('MatProg xyz123 - %s') % filename)
        finally:
            dlg.Destroy()
    def OnWriteINP(self, evt):
        evt.Skip()
    """
    Still in development:
    def OnOpenApp(self, evt):
        dlg = wx.FileDialog(self.window, "Save file as", ".", "", "*.xyz",
wx.SAVE|wx.OVERWRITE_PROMPT)
        try:
            if dlg.ShowModal() == wx.ID_OK:
                filename = dlg.GetPath()
                a={}
                a['Tables']=len(self.window.tablestore)
                for z in xrange(0,len(self.window.tablestore)):
                    for x in xrange(0,self.window.tablestore[z-1].i):
                        for y in xrange(0,self.window.tablestore[z-1].j):

self.window.tablestore[z-1].tabelle.SetCellValue(a['text',z,x,y],x,y)
                            print a['text',z,x,y]
                f=open(filename, "w")
                f.write('Test')
                f.write("\n")
                f.write(filename)
                f.write("\n\n")
                pickle.dump(a,f)
                f.close()
                self.FileName=filename
                #self.SetTitle(('MatProg xyz123 - %s') % filename)
        finally:
            dlg.Destroy()
    """
    def OnMainMenu(self,evt):
        self.window.Show(False)
        self.window = WorkingArea(self)
        self.window.Show(True)
        frame=MainWindow()
        frame.Show(True)
        MyApp.SetTopWindow(frame)
#----------------------------------------------------------------------
class MyApp(wx.App):
    def OnInit(self):
        frame=MainWindow()
        frame.Show(True)
        self.SetTopWindow(frame)
        return True
#----------------------------------------------------------------------
def main():
    app = MyApp()
    app.MainLoop()
if __name__ == '__main__':
    main()
[\python]

It would be very nice, if anybody could help me!

Thank you!

Please ask me, if you don’t know, what I mean!

--
*************************************
Philippe C. Martin
SnakeCard, LLC
www.snakecard.com
+1 405 694 8098
*************************************

I cannot read your email

···

On Tuesday 14 June 2005 02:38 pm, huliang@126.com wrote:

���������Ѿ��յ���

--
*************************************
Philippe C. Martin
SnakeCard, LLC
www.snakecard.com
+1 405 694 8098
*************************************

Hello,

I have removed the linebreaks (so it is runnable) and you can download
the file at:

http://mitglied.lycos.de/drpython/schnelleingabe.zip

···

--
Franz Steinhaeusler

Hello Philippe,

thanks for your answer!

Problem 1. In the class 'Schnelleingabe' I wrote the methode 'OnAnotherTab'.
This methode creates a grid which should be inserted to the sizer
'self.PartSizer['Tabletest_a']' before the button! But it doesn't work! (See
Error-message in the Code)

Problem 2. The doc-string in my code where 'This here is my biggest
problem!!!' is written! I'd like to say something like
'self.Bind(wx.EVT_BUTTON, self.OnAnotherTab(self, bez=ParameterName),
id=ID_ANOTHERRATE[ParameterName])', but it doesn't work!
As you can see in Problem 1 I need instead of 'Tabletest_a' the
'ParameterName' to use the methode for every table!

And yes, I mean the grids!

···

--
Jens Petersen

Berliner Str. 96
25746 Heide
Germany

Tel.: 0179/7996543

Weitersagen: GMX DSL-Flatrates mit Tempo-Garantie!
Ab 4,99 Euro/Monat: http://www.gmx.net/de/go/dsl

The last couple posts I've made to this list have resulted in a direct
response from the same address. I suspect it's some sort of
virus/spambot/autoreply gone bad. I don't know who controls the
wx-python list directly, but perhaps we can unsubscribe that address?

···

On 6/14/05, Philippe C. Martin <philippecmartin@sbcglobal.net> wrote:

I cannot read your email

On Tuesday 14 June 2005 02:38 pm, huliang@126.com wrote:
> ��������Ѿ��յ���

--
*************************************
Philippe C. Martin
SnakeCard, LLC
www.snakecard.com
+1 405 694 8098
*************************************

---------------------------------------------------------------------
To unsubscribe, e-mail: wxPython-users-unsubscribe@lists.wxwidgets.org
For additional commands, e-mail: wxPython-users-help@lists.wxwidgets.org

Jens Petersen wrote:

                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab,
id=ID_ANOTHERRATE[ParameterName])
                """
                This here is my biggest problem!!!
                From here I'd like to call the method 'self.OnAnotherTab', but I need the value of 'ParameterName' in the method!
                Why doesn't it work this way:
                self.Bind(wx.EVT_BUTTON, self.OnAnotherTab(self,
bez=ParameterName), id=ID_ANOTHERRATE[ParameterName])
                """

Because When you use the callable() syntax then you are calling the callable and the result of the expression is the return value of the callable, which in this case is None. But Bind needs to have a callable object passed to it, so unless the return value of callable() is another callable, it won't work that way because the event dispatching code can't call None().

However Python is flexible enough to do what you want. Somebody posted here a few weeks ago a method to bind the event to a lambda expression to pass extra parameters to an event handler. Off the top of my head it was something like this:

  self.Bind(wx.EVT_BUTTON,
    lambda evt: self.OnAnotherTab(evt, ParameterName),
    id=ID_ANOTHERRATE[ParameterName])

        But this error-massage is shown:
        Traceback (most recent call last):
        File "D:\Panel.py", line 281, in OnAnotherTab
        self.PartSizer[ParameterName].Add(self.TabSizer[TableName], 2,
border=1, flag=0)
        File "C:\Python23\Lib\site-packages\wx-2.5.4-msw-ansi\wx\_core.py",
line 11263, in __getattr__
        raise PyDeadObjectError(self.attrStr % self._name)
        wx._core.PyDeadObjectError: The C++ part of the BoxSizer object has
been deleted, attribute access no longer allowed.
        self.PartSizer['Tabletest_a'] is existing! Where is my mistake???

Because in WorkingArea.__init__ you do this:

         self.panel1=Schnelleingabe(self)
         self.FLexGrid1 = wx.FlexGridSizer(cols=1, vgap=4, hgap=4)

         self.panel1.SetSizer( self.FLexGrid1 )

so the sizer already assigned to self.panel1 in Schnelleingabe.__init__ is destroyed (including all of it's subsizers) when you give it a new one.

···

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!

Hello,

Thanks to Robin,

now I'm using:
self.Bind(wx.EVT_BUTTON,
        lambda evt: self.OnAnotherTab(evt, ParameterName),
        id=ID_ANOTHERRATE[ParameterName])

But the 'ParameterName' is always 'Tabellentest_b' and not, as I wanted to,
the 'ParameterName' of the table above.

And: Is there another way to make the Sizers work?
The Error-message doesn't accures anymore when I don't write
'self.panel1.SetSizer( self.FLexGrid1 )'.
But when I press the button to add another table, the table isn't shown on
the right place!!!

···

--
Jens Petersen

Berliner Str. 96
25746 Heide

Tel.: 0179/7996543

Weitersagen: GMX DSL-Flatrates mit Tempo-Garantie!
Ab 4,99 Euro/Monat: http://www.gmx.net/de/go/dsl

Jens Petersen wrote:

Hello,

Thanks to Robin,

now I'm using:
self.Bind(wx.EVT_BUTTON,
        lambda evt: self.OnAnotherTab(evt, ParameterName),
        id=ID_ANOTHERRATE[ParameterName])

But the 'ParameterName' is always 'Tabellentest_b' and not, as I wanted to,
the 'ParameterName' of the table above.

Oops, I forgot something, try it like this instead:

  lambda evt, name=ParameterName: self.OnAnotherTab(evt, name)

That way a reference to the current ParameterName value is held as the default value for the name parameter

And: Is there another way to make the Sizers work?
The Error-message doesn't accures anymore when I don't write
'self.panel1.SetSizer( self.FLexGrid1 )'.
But when I press the button to add another table, the table isn't shown on
the right place!!!

Do you add the new table to the existing sizer?

···

--
Robin Dunn
Software Craftsman
http://wxPython.org Java give you jitters? Relax with wxPython!