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!

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

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,[Auswahlmöglichkeiten])
        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)

[\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

Berliner Str. 96
25746 Heide

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

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!

Hello Jens,

No problem, same here (Austria) :wink:

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!

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

please don't copy and paste the source into your posting.
There are many, many linebreaks.

Also it would be nice, if you could deliver a whole
working sample (with __main__)

···

On Tue, 14 Jun 2005 11:32:17 +0200 (MEST), "Jens Petersen" <PetersenJens@gmx.de> wrote:
--
Franz Steinhaeusler