示例#1
0
def test_inputform_1():
    """
    Function to test the instanciation of an InputForm object with the
    following arguments:
    master = Tkinter.Tk()
    root   = None
    descr  = InputFormDescr containing a checkbutton and a radioselect
             widget... very simple.
    and the default value for the other argument of the constructor without
    specifying them
    """
    descr = createDescr()
    form = InputForm(master, root, descr)
    setWidget = {
        'checkbutton': 1,
        'radioselect': 'rb9',
        'radioselect2': 'rb4',
        'listchooser': 'Pistachio'
    }

    value = form.testForm(setWidget=setWidget)

    assert value['checkbutton'] == 1, 'Expected 1, got %s' % (
        value['checkbutton'])
    assert value['radioselect'] == 'rb9'
    assert value['radioselect2'] == 'rb4'
    assert value['listchooser'] == [
        'Pistachio',
    ]
    form.destroy()
示例#2
0
def test_inputform_initialize():
    """
    Function to test the creation of an object InputForm with:
    master = Tkinter.Tk()
    root   = None
    descr  = InputFormDescr containing a checkbutton and a radioselect
             widget... very simple.
    and the default value for the other argument of the constructor
    initFunc  = initialize()
    Focus on the initFunc
    """
    def initialize(form):
        w = form.descr.entryByName['listchooser']['widget']
        w.add(('Coconut', None))

    descr = createDescr()
    form = InputForm(master, root, descr, initFunc=initialize)
    setWidget = {
        'checkbutton': 1,
        'radioselect': 'rb9',
        'radioselect2': 'rb4',
        'listchooser': 'Pistachio'
    }
    value = form.testForm(setWidget=setWidget)
    ent = form.descr.entryByName['listchooser']['widget'].entries
    assert 'Coconut' in map(lambda x: x[0], ent)
def test_thumbwheel():
    def tw_cb(event=None):
        pass
    from mglutil.gui.BasicWidgets.Tk.thumbwheel import ThumbWheel
    descr = InputFormDescr(title = 'Testing InputForm')
    descr.append({'name':'thumbwheel',
                  'widgetType':ThumbWheel,
                  'tooltip':"""Right click on the widget will display the control
                  panel and you can type a value manually""",
                  'defaultValue':100,
                  'wcfg':{'text':None,
                          'showLabel':1, 'width':100,
                          'min':0,
                          'lockBMin':1,
                          'lockBMax':1,
                          'lockBIncrement':1,
                          'value':40,
                          'oneTurn':1000,
                          'type':'int',
                          'increment':2,
                          'canvascfg':{'bg':'red'},
                          'wheelLabcfg1':{'font':(ensureFontCase('times'),14,'bold')},
                          'wheelLabcfg2':{'font':(ensureFontCase('times'),14,'bold')},
                          'callback':tw_cb,
                          'continuous':1, 'wheelPad':1, 'height':20},
                  'gridcfg':{'sticky':'e','row':-1}})
    
    form = InputForm(master, root, descr)
    value = form.testForm()
    assert value['thumbwheel']==100
    form.destroy() 
示例#4
0
def test_scrolledText():
    descr = InputFormDescr(title="Testing ScrolledText")
    descr.append({
        'widgetType': Pmw.ScrolledText,
        'name': 'sText',
        'defaultValue': """DEFAULT TEXT""",
        'wcfg': {
            'labelpos': 'n',
            'label_text': 'ScrolledText with headers',
            'usehullsize': 1,
            'hull_width': 400,
            'hull_height': 300,
            'text_wrap': 'none',
            'text_padx': 4,
            'text_pady': 4,
        },
        'gridcfg': {
            'sticky': 'wens'
        }
    })

    form = InputForm(master, root, descr, modal=0, blocking=0)
    values = form.testForm()
    if not values['sText'] == 'DEFAULT TEXT\n':
        raise RuntimeError
    form.destroy()
示例#5
0
def test_inputform_okcfg():
    """
    Function to test the creation of an object InputForm with:
    master = Tkinter.Tk()
    root   = None
    descr  = InputFormDescr containing a checkbutton and a radioselect
             widget... very simple.
    okCfg     = {'text':'Validate', 'command':validate_cb}
    cancelCfg = {'text':'Cancel', 'command':dismiss_cb}
    The other argument keep their default values.
    
    Focus on the ok and cancel buttons option. Adding a function to be called
    after by ok_cb or cancel_cb. In this case the additional functions
    dismiss_cb and validate_cb don't take any arguments
    """
    global dismiss
    global validate
    dismiss = False
    validate = False

    def dismiss_cb():
        global dismiss
        dismiss = True

    def validate_cb():
        print "In validate_cb"
        global validate
        validate = True
        print validate

    descr = createDescr()
    form = InputForm(master,
                     root,
                     descr,
                     modal=1,
                     blocking=0,
                     okCfg={
                         'text': 'Validate',
                         'command': validate_cb
                     },
                     cancelCfg={
                         'text': 'Dismiss',
                         'command': dismiss_cb
                     })
    setWidget = {
        'checkbutton': 1,
        'radioselect': 'rb9',
        'radioselect2': 'rb4',
        'listchooser': 'Pistachio'
    }
    value = form.testForm(setWidget=setWidget)
    print 'validate', validate
    print 'dismiss', dismiss
    assert validate
    assert not dismiss
    form.destroy()
def test_inputform_groupwidgetsdefault():
    descr = InputFormDescr(title = 'Testing InputForm')
    descr.append({'name':'group',
                  'widgetType':Tkinter.Radiobutton,
                  'listtext':['rb1', 'rb2', 'rb3'],
                  'defaultValue':'rb3',
                  'gridcfg':{'sticky':'w'}})
    
    form = InputForm(master, root, descr)
    value = form.testForm()
    assert value['group']=='rb3'
    form.destroy() 
def test_inputForm_notebook():
    descr = InputFormDescr(title = 'Testing InputForm')
    descr.append({'widgetType':Pmw.NoteBook,
                  'name':'notebook',
                  'container':{'Page1':"w.page('Page1')",
                               'Page2':"w.page('Page2')",
                               'Page3':"w.page('Page3')"},
                  'wcfg':{'borderwidth':3},
                  'componentcfg':[{'name':'Page1', 'cfg':{}},
                                  {'name':'Page2', 'cfg':{}},
                                  {'name':'Page3', 'cfg':{}}],
                  'gridcfg':{'sticky':'wnse'}
                  })

    entries = [('Chocolate',None), ('Vanilla', None), ('Strawberry', None),
               ('Coffee',None), ('Pistachio', None), ('Rasberry',None),
               ]

    descr.append({'name':'listchooser',
                  'parent':'Page1',
                  'widgetType':ListChooser,
                  'defaultValue':'Chocolate',
                  'wcfg':{'entries':entries},
                  'gridcfg':{'sticky':'w'}
                  })
    
    descr.append({'name':'radioselect2',
                  'widgetType':Pmw.RadioSelect,
                  'parent':'Page2',
                  'listtext':['rb1', 'rb2', 'rb3','rb4', 'rb5', 'rb6',
                              'rb7', 'rb8', 'rb9','rb10', 'rb11', 'rb12'],
                  'wcfg':{'labelpos':'n',
                          'label_text':'Radiobuttons: ',
                          'orient':'horizontal',
                          'buttontype':'radiobutton'},
                  'gridcfg':{'sticky':'w'} })

    descr.append({'name':'radioselect',
                  'widgetType':Pmw.RadioSelect,
                  'parent':'Page3',
                  'defaultValue':'rb5',
                  'listtext':['rb1', 'rb2', 'rb3','rb4', 'rb5', 'rb6',
                              'rb7', 'rb8', 'rb9','rb10', 'rb11', 'rb12'],
                  'wcfg':{'labelpos':'n',
                          'label_text':'Radiobuttons: ',
                          'orient':'vertical',
                          'buttontype':'radiobutton'},
                  'gridcfg':{'sticky':'w'} })
    form = InputForm(master, root, descr, modal=0, blocking=0)
    values = form.testForm(container='Page3')
    assert values['radioselect']=='rb5'
    form.destroy() 
示例#8
0
 def getInt(self):
     idf = InputFormDescr(title='Choose a value')
     idf.append({
         'widgetType': IntThumbWheel,
         'name': 'tw',
         'wcfg': {
             'width': 125,
             'height': 30,
             'nblines': 30
         }
     })
     form = InputForm(master=self.widget.master, root=None, descr=idf)
     values = form.go()
     return values['tw']
示例#9
0
def test_inputform_2():
    """
    
    Function to test the instanciation of an InputForm object with the
    following arguments:
    master = Tkinter.Tk()
    root   = None
    descr  = InputFormDescr containing a checkbutton and a radioselect
             widget... very simple.
    and the default value for the other argument of the constructor
    modal    = 1
    blocking = 0,
    defaultDirection = 'row',
    closeWithWindow = 1,
    onDestroy = None
    okCfg     = {'text':'OK'}
    cancelCfg = {'text':'Cancel'}
    initFunc  = None

    Focus on the scrolled frame options.
    """
    import Pmw
    descr = createDescr()
    form = InputForm(master,
                     root,
                     descr,
                     modal=1,
                     blocking=0,
                     defaultDirection='row',
                     closeWithWindow=1,
                     onDestroy=None,
                     okCfg={'text': 'Validate'},
                     cancelCfg={'text': 'Dismiss'},
                     scrolledFrame=1,
                     width=400,
                     height=500,
                     initFunc=None)

    assert isinstance(form.sf, Pmw.ScrolledFrame)
    setWidget = {
        'checkbutton': 1,
        'radioselect': 'rb9',
        'radioselect2': 'rb4',
        'listchooser': 'Pistachio'
    }

    value = form.testForm(setWidget=setWidget)
    form.destroy()
示例#10
0
    def showForm(self, master, geomDic=None, func=None):
        """create formdescr for setGeoms
        geomDic = a dict of Geom 
        """
        # assign a func so we can log it in Pmv
        # func is a Pmv command
        if func:
            self.assign_func = func

        if geomDic:
            self.assignGeom[0] = geomDic

        if hasattr(self, 'form'):
            if self.guiOn:
                return
            else:
                self.update_lc2()
                self.form.deiconify()
                val = self.form.go()

                if val:
                    geomDic = self.assignGeom[0]
                    self.assign_func(geomDic)
                    self.form.withdraw()
        else:
            if not master:
                master = Tkinter.Toplevel()
                master.title('GeomChooser')
            else:
                master = master

            ifd = self.buildForm()
            self.form = InputForm(master,
                                  None,
                                  descr=ifd,
                                  scrolledFrame=0,
                                  cancelCfg={'command': self.cancel_cb})

            self.lc = self.form.descr.entryByName['availableGeom']['widget']
            self.lc2 = self.form.descr.entryByName['toload']['widget']
            self.addObject(self.viewer.rootObject, None)
            self.update_lc2()
            val = self.form.go()
            if val:
                geomDic = self.assignGeom[0]
                self.assign_func(geomDic)
                self.form.withdraw()
示例#11
0
def test_inputform_3():
    """
    Function to test the instanciation of an InputForm object with the
    following argument, same options than before but this time the default
    arguments are specified. Change the text of the OK button to VALIDATE and
    the cancel button to DISMISS
    
    master = Tkinter.Tk()
    root   = None
    descr  = InputFormDescr containing a checkbutton and a radioselect
             widget... very simple.
    modal    = 1
    blocking = 0,
    defaultDirection = 'row',
    closeWithWindow = 1,
    onDestroy = None,
    sFrameCfg = {}
    okCfg     = {'text':'VALIDATE'}
    cancelCfg = {'text':'DISMISS'}
    initFunc  = None

    Focus on the ok and cancel button options
    """
    descr = createDescr()
    # I don't know how to make sure that the ok button is now labeled VALIDATE
    # and the cancel button 'DISMISS'.
    form = InputForm(master,
                     root,
                     descr,
                     modal=1,
                     blocking=0,
                     defaultDirection='row',
                     closeWithWindow=1,
                     onDestroy=None,
                     okCfg={'text': 'VALIDATE'},
                     cancelCfg={'text': 'DISMISS'},
                     initFunc=None)
    setWidget = {
        'checkbutton': 1,
        'radioselect': 'rb9',
        'radioselect2': 'rb4',
        'listchooser': 'Pistachio'
    }

    value = form.testForm(setWidget=setWidget)
    #value = form.testForm()
    form.destroy()
示例#12
0
 def buildText(self,parent,textwcfg, buttonwcfg):
     # Build the LoadOrSaveText widget or ScrolledText
     self.idf = InputFormDescr()
     textwcfg['name']='UserFunction'
     self.text = buttonwcfg['text']
     self.idf.append(textwcfg)
     #windows = InputForm(parent, self.idf)
     master = parent
     root = None
     windows = InputForm(master,root,  self.idf)
     self.vals = windows.go()
     # Uncheck the checkbutton if needed
     if isinstance(self.button,Tkinter.Checkbutton) and \
        buttonwcfg.has_key('variable'):
         if isinstance(buttonwcfg['variable'], Tkinter.StringVar):
             buttonwcfg['variable'].set('0')
         elif isinstance(buttonwcfg['variable'], Tkinter.IntVar):
             buttonwcfg['variable'].set(0)
    def displayPanel(self, create):
        self.flag = 1
        if create == 0:
            self.optionsForm.deiconify()
        else:
            self.optionsForm = InputForm(self.master,
                                         self.root,
                                         descr=self.idf,
                                         modal=0,
                                         blocking=0)

            self.cont_entry = self.idf.entryByName['togCont']['widget']
            self.mode_entry = self.idf.entryByName['togAxes']['widget']
            self.prec_entry = self.idf.entryByName['selPrec']['widget']

            menus = (self.cont_entry, self.mode_entry, self.prec_entry)
            Pmw.alignlabels(menus)

            w = self.idf.entryByName['togCont']['widget']
            if self.master.continuous == None or self.master.continuous == 0:
                w.setvalue('on')  #i=1
            else:
                w.setvalue('off')  #i=0

            axe = self.master.mode
            if axe == 'XY': axe = 0
            elif axe == 'X': axe = 1
            elif axe == 'Y': axe = 2
            elif axe == 'Z': axe = 3
            self.idf.entryByName['togAxes']['widget'].setitems(items=('XY',
                                                                      'X', 'Y',
                                                                      'Z'),
                                                               index=axe)

            prc = int(self.master.precision) - 1
            if prc > 9: prc = 9
            self.idf.entryByName['selPrec']['widget'].setitems(
                items=('1', '2', '3', '4', '5', '6', '7', '8', '9', '10'),
                index=prc)

            self.updateDisplay()
            self.lockUnlockDisplay()
示例#14
0
    def setparams_cb(self):
        """Opens a panel to set Video Parameters"""
        if self.paramForm:
            self.paramForm.deiconify()
            return
        self.ifd2 = ifd2 = InputFormDescr(title="Set video options")
        ifd2.append({
            'widgetType': Pmw.EntryField,
            'tooltip': 'Set camera width',
            'name': 'cameraw',
            'gridcfg': {
                'sticky': 'w',
                'columnspan': 2
            },
            'wcfg': {  #'command': self.setCameraWidth_cb,
                'label_text': 'width:',
                'entry_width': 10,
                'validate': {
                    'validator': 'real',
                    'min': 0
                },
                'value': str(self.cameraw),
                'labelpos': 'w'
            }
        })

        ifd2.append({
            'widgetType': Pmw.EntryField,
            'name': 'camerah',
            'tooltip': 'Set camera height',
            'gridcfg': {
                'sticky': 'w',
                'columnspan': 2
            },
            'wcfg': {  #'command': self.setCameraHeight_cb,
                'label_text': 'height',
                'entry_width': 10,
                'validate': {
                    'validator': 'real',
                    'min': 0
                },
                'value': str(self.camerah),
                'labelpos': 'w'
            }
        })
        ifd2.append({
            'name': 'autoPause',
            'wtype': ThumbWheel,
            'widgetType': ThumbWheel,
            'tooltip': 'set auto pause delay (seconds)',
            'wcfg': {
                'labCfg': {
                    'fg': 'black',
                    'side': 'left',
                    'text': 'AutoPause Delay'
                },
                'showLabel': 1,
                'width': 100,
                'min': 0,
                'value': self.autoPauseDelay,
                'oneTurn': 100,
                'type': 'int',
                'increment': 1,
                #'callback':self.setAutoPauseDelay_cb,
                'canvascfg': {
                    'bg': 'red'
                },
                'continuous': 0,
                'wheelPad': 1,
                'height': 15
            },
            'gridcfg': {
                'sticky': 'nesw',
                'columnspan': 2
            }
        })
        ifd2.append({
            'name': 'pauseLength',
            'wtype': ThumbWheel,
            'widgetType': ThumbWheel,
            'tooltip':
            'set number of frames to be added when\nrecording resumes after autopause',
            'wcfg': {
                'labCfg': {
                    'fg': 'black',
                    'side': 'left',
                    'text': 'AutoPause Length'
                },
                'showLabel': 1,
                'width': 100,
                'min': 0,
                'value': self.pauseLength,
                'oneTurn': 100,
                'type': 'int',
                'increment': 1,
                #'callback':self.setPauseLength_cb,
                'canvascfg': {
                    'bg': 'red'
                },
                'continuous': 0,
                'wheelPad': 1,
                'height': 15
            },
            'gridcfg': {
                'sticky': 'nesw',
                'columnspan': 2
            }
        })
        ifd2.append({
            'name': 'okB',
            'widgetType': Tkinter.Button,
            'wcfg': {
                'text': 'Apply',
                'command': self.apply_cb,
            },
            'gridcfg': {
                'sticky': 'nesw'
            }
        })
        ifd2.append({
            'name': 'cancelB',
            'widgetType': Tkinter.Button,
            'wcfg': {
                'text': 'Cancel',
                'command': self.cancel_cb,
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1,
                'column': 1
            }
        })
        self.paramForm = InputForm(self.master,
                                   None,
                                   descr=ifd2,
                                   modal=0,
                                   blocking=0)
        self.paramForm.deiconify()

        return self.paramForm
    def displayPanel(self, create):
        self.flag = 1
        if create == 0:
            self.optionsForm.deiconify()
        else:
            self.optionsForm = InputForm(self.master.master,
                                         self.root,
                                         descr=self.idf,
                                         modal=0,
                                         blocking=0)

            self.cont_entry = self.idf.entryByName['togCont']['widget']
            self.min_entry = self.idf.entryByName['inpMin']['widget']
            self.bmin_entry = self.idf.entryByName['togMin']['widget']
            self.max_entry = self.idf.entryByName['inpMax']['widget']
            self.bmax_entry = self.idf.entryByName['togMax']['widget']
            self.incr_entry = self.idf.entryByName['inpIncr']['widget']
            self.bincr_entry = self.idf.entryByName['togIncr']['widget']
            self.val_entry = self.idf.entryByName['inpVal']['widget']
            self.sens_entry = self.idf.entryByName['inpSens']['widget']
            self.lab_entry = self.idf.entryByName['togLabel']['widget']
            self.if_entry = self.idf.entryByName['togIntFloat']['widget']
            self.prec_entry = self.idf.entryByName['selPrec']['widget']

            if self.master.min is not None:
                val = self.master.type(self.master.min)
                self.minInput.set(self.master.labelFormat % val)
                self.toggleMin.set(1)
                self.min_entry.configure(state='normal', fg='gray0')
            else:
                self.min_entry.configure(state='disabled', fg='gray40')
            self.bmin_entry.configure(state='normal', fg='gray0')

            if self.master.max is not None:
                val = self.master.type(self.master.max)
                self.maxInput.set(self.master.labelFormat % val)
                self.toggleMax.set(1)
                self.max_entry.configure(state='normal', fg='gray0')
            self.bmax_entry.configure(state='normal', fg='gray0')

            if self.master.increment is not None:
                val = self.master.type(self.master.increment)
                self.incrInput.set(self.master.labelFormat % val)
                if self.master.increment != 0:
                    self.toggleIncr.set(1)
                self.incr_entry.configure(state='normal', fg='gray0')
            self.bincr_entry.configure(state='normal', fg='gray0')

            menus = (self.cont_entry, self.lab_entry, self.if_entry,
                     self.prec_entry)
            Pmw.alignlabels(menus)

            if self.master.continuous == None or self.master.continuous == 0:                \
                               i=1
            else:
                i = 0
            self.cont_entry.setitems(items=('on', 'off'), index=i)

            if self.master.type == int:
                self.if_entry.setitems(items=('float', 'int'), index=1)

            prc = int(self.master.precision) - 1
            if prc > 9: prc = 9
            self.prec_entry.setitems(items=('1', '2', '3', '4', '5', '6', '7',
                                            '8', '9', '10'),
                                     index=prc)

            self.lab_entry.setitems(items=('never', 'always', 'move'),
                                    index=self.master.showLabel)

            if self.if_entry.getcurselection() == 'int':
                self.showHidePrec('int')

            self.updateDisplay()
            self.lockUnlockDisplay()
示例#16
0
    def buildForm(self, titleStr):
        #??FIX THIS:
        self.stop = 1
        if hasattr(self, 'form'):
            self.form.deiconify()
            return
        maxval = self.endFrame
        ifd = InputFormDescr(title=titleStr)
        if self.hasCounter:
            ifd.append({
                'widgetType': Pmw.Counter,
                'name': 'statesCounter',
                'required': 1,
                'tooltip': 'used to show frames via random access',
                'wcfg': {  #'labelpos': 'n,
                    #'label_text':'conformation:  ',
                    'autorepeat': 0,
                    'entryfield_value': self.startFrame,
                    #'entryfield_value':self.idList[0],
                    'datatype': self.custom_counter,
                    'entry_width': 9,
                    'entryfield_validate': self.custom_validate
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'columnspan': 2
                }
            })
        ifd.append({
            'name': 'playB',
            'widgetType': Tkinter.Button,
            'text': 'Play',
            'tooltip': 'play sequence according to current play mode',
            'wcfg': {
                'bd': 4
            },
            'gridcfg': {
                'sticky': 'nesw',
                'columnspan': 1
            },
            'command': self.Play_cb
        })
        ifd.append({
            'name': 'playRevB',
            'widgetType': Tkinter.Button,
            'text': 'Play Reverse',
            'wcfg': {
                'bd': 4
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1,
                'column': 1
            },
            'command': self.PlayRev_cb
        })
        ifd.append({
            'name': 'playTB',
            'widgetType': Tkinter.Button,
            'text': 'Play+Return',
            'wcfg': {
                'bd': 4
            },
            'gridcfg': {
                'sticky': 'nesw',
                'columnspan': 1
            },
            'command': self.PlayReturn_cb
        })
        ifd.append({
            'name': 'loopB',
            'widgetType': Tkinter.Button,
            'text': 'Loop',
            'wcfg': {
                'bd': 4
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1,
                'column': 1
            },
            'command': self.Loop_cb
        })
        ifd.append({
            'name': 'stopB',
            'widgetType': Tkinter.Button,
            'text': 'Stop',
            'tooltip': 'stop play',
            'wcfg': {
                'bd': 4,
            },
            'gridcfg': {
                'sticky': 'nesw'
            },
            'command': self.Stop_cb
        })
        #add fastforward, fastrewind, thumbwheel for speed
        ifd.append({
            'name': 'pauseB',
            'widgetType': Tkinter.Button,
            'text': 'Pause',
            'wcfg': {
                'bd': 4
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1,
                'column': 1
            },
            'command': self.Pause_cb
        })

        ifd.append({
            'name': 'closeB',
            'widgetType': Tkinter.Button,
            'text': 'Close',
            'wcfg': {
                'bd': 4
            },
            #'gridcfg':{'sticky':'nesw','row':-1, 'column':1},
            'gridcfg': {
                'sticky': 'nesw',
                'columnspan': 2
            },
            'command': self.Close_cb
        })
        form = InputForm(self.master,
                         self.root,
                         descr=ifd,
                         modal=0,
                         blocking=0,
                         closeWithWindow=1)
        form.ifd = ifd
        if self.hasCounter:
            ctr = ifd.entryByName['statesCounter']['widget']
            entF = ctr.component('entryfield')
            form.ent2 = entF._entryFieldEntry
            da = ctr.component('downarrow')
            ua = ctr.component('uparrow')
            for item in [da, ua]:
                item.bind('<ButtonPress-1>', self.SetState_cb, '+')
            form.ent2.bind('<Return>', self.SetState_cb, '+')
            form.counter = form.ifd.entryByName['statesCounter']['widget']
        form.stopB = form.ifd.entryByName['stopB']['widget']
        form.playB = form.ifd.entryByName['playB']['widget']
        form.playRevB = form.ifd.entryByName['playRevB']['widget']
        #print 'returning form1'
        self.form = form
        return form
示例#17
0
    def buildForm2(self, titleStr):
        self.stop = 1
        if hasattr(self, 'form'):
            if hasattr(self.form, 'deiconify'):
                self.form.deiconify()
                return
        maxval = self.endFrame
        ifd = InputFormDescr(title=titleStr)

        if self.buttonMask.get('gotoStartB', None) is not False:
            ifd.append({
                'name': 'gotoStartB',
                'widgetType': Tkinter.Button,
                #'text':'gotoStart',
                'tooltip': 'sets frame to current startFrame',
                'wcfg': {
                    'bd': 4,
                    'image': self.gotoStartIcon,
                    'width': self.gotoStartIcon.width(),
                    'height': self.gotoStartIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw'
                },
                'command': self.GoToStart_cb
            })

        if self.buttonMask.get('fastReverseB', None) is not False:
            ifd.append({
                'name': 'fastReverseB',
                'widgetType': Tkinter.Button,
                #'text':'fastReverse',
                'tooltip': 'play reverse as fast as possible',
                'wcfg': {
                    'bd': 4,
                    'image': self.ff_revIcon,
                    'width': self.ff_revIcon.width(),
                    'height': self.ff_revIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 1
                },
                'command': self.FastReverse_cb
            })

        if self.buttonMask.get('playRevB', None) is not False:
            ifd.append({
                'name': 'playRevB',
                'widgetType': Tkinter.Button,
                #'text':'Play Reverse',
                'tooltip': 'play reverse according to current play mode',
                'wcfg': {
                    'bd': 4,
                    'image': self.playRevIcon,
                    'width': self.playRevIcon.width(),
                    'height': self.playRevIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 2
                },
                'command': self.PlayRev_cb
            })

            if self.hasCounter:
                ifd.append({
                    'widgetType': Pmw.Counter,
                    'name': 'statesCounter',
                    'required': 1,
                    'tooltip': 'used to show frames via random access',
                    'wcfg': {  #'labelpos': 'n,
                        #'label_text':'conformation:  ',
                        'autorepeat': 0,
                        'entryfield_value': self.startFrame,
                        #'entryfield_value':self.idList[0],
                        'datatype': self.custom_counter,
                        'entry_width': 3,
                        'entryfield_validate': self.custom_validate
                    },
                    'gridcfg': {
                        'sticky': 'nesw',
                        'row': -1,
                        'column': 3,
                        'columnspan': 2
                    }
                })

        if self.buttonMask.get('playB', None) is not False:
            ifd.append({
                'name': 'playB',
                'widgetType': Tkinter.Button,
                #'text':'Play',
                'tooltip': 'play forward according to current play mode',
                'wcfg': {
                    'bd': 4,
                    'image': self.playIcon,
                    'width': self.playIcon.width(),
                    'height': self.playIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 5
                },
                'command': self.Play_cb
            })

        if self.buttonMask.get('fastForwardB', None) is not False:
            ifd.append({
                'name': 'fastForwardB',
                'widgetType': Tkinter.Button,
                #'text':'fastForward',
                'tooltip': 'play as fast as possible',
                'wcfg': {
                    'bd': 4,
                    'image': self.ff_fwdIcon,
                    'width': self.ff_fwdIcon.width(),
                    'height': self.ff_fwdIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 6
                },
                'command': self.FastForward_cb
            })

        if self.buttonMask.get('gotoEndB', None) is not False:
            ifd.append({
                'name': 'gotoEndB',
                'widgetType': Tkinter.Button,
                #'text':'gotoEnd',
                'tooltip': 'sets frame to current endFrame',
                'wcfg': {
                    'bd': 4,
                    'image': self.gotoEndIcon,
                    'width': self.gotoEndIcon.width(),
                    'height': self.gotoEndIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 7
                },
                'command': self.GoToEnd_cb
            })

        if self.buttonMask.get('modeB', None) is not False:
            ifd.append({
                'name': 'modeB',
                'widgetType': Tkinter.Button,
                'text': 'Change Mode',
                'tooltip': 'opens panel to change play options',
                'wcfg': {
                    'bd': 4,
                    'image': self.chmodIcon,
                    'width': self.chmodIcon.width(),
                    'height': self.chmodIcon.height()
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 8
                },
                'command': self.SetMode_cb
            })

        if pymediaFound and self.buttonMask.get('recordB', None) is not False:
            ifd.append({
                'name': 'recordB',
                'widgetType': Tkinter.Checkbutton,
                'text': 'Record',
                'tooltip': 'record an mpeg movie into movie.mpeg',
                'defaultValue': 0,
                'wcfg': {
                    'bd': 4,
                    'variable': Tkinter.IntVar(),
                    'image': self.recIcon,
                    'width': self.recIcon.width(),
                    'height': self.recIcon.height(),
                    'indicatoron': 0,
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 9
                },
                'command': self.startRecording_cb
            })

        if self.buttonMask.get('setanimB', None) is not False:
            ifd.append({
                'name': 'setanimB',
                'widgetType': Tkinter.Button,
                'text': 'SetAnim',
                'tooltip': 'Set Animation',
                'wcfg': {
                    'bd': 4
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 10
                },
                'command': self.SetAnim_cb
            })

        if self.buttonMask.get('closeB', None) is not False:
            ifd.append({
                'name': 'closeB',
                'widgetType': Tkinter.Button,
                'text': 'Close',
                'tooltip': 'closes player',
                'wcfg': {
                    'bd': 4,
                    'image': self.closeIcon,
                    'width': self.closeIcon.width(),
                    'height': self.closeIcon.height(),
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 11
                },
                #'gridcfg':{'sticky':'nesw', 'columnspan':2},
                'command': self.Close_cb
            })

        if self.hasSlider:
            ifd.append({
                'name': 'slider',
                'widgetType': Tkinter.Scale,
                'wcfg': {
                    'orient': 'horizontal',
                    'from_': self.startFrame,
                    'to': self.maxFrame,
                    'showvalue': False
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': 1,
                    'column': 0,
                    'columnspan': 12
                },
                'command': self.nextFrame
            })
        #form = self.vf.getUserInput(ifd, modal=0,blocking=0)
        form = InputForm(self.master,
                         self.root,
                         descr=ifd,
                         modal=0,
                         blocking=0,
                         closeWithWindow=1)
        form.ifd = ifd
        form.playB = form.ifd.entryByName['playB']['widget']
        form.playRevB = form.ifd.entryByName['playRevB']['widget']
        #set up link to balloon help which needs to change, also
        form.playTT = form.ifd.entryByName['playB']['balloon']
        form.playRevTT = form.ifd.entryByName['playRevB']['balloon']
        if self.hasCounter:
            ctr = ifd.entryByName['statesCounter']['widget']
            entF = ctr.component('entryfield')
            form.ent2 = entF._entryFieldEntry
            da = ctr.component('downarrow')
            ua = ctr.component('uparrow')
            for item in [da, ua]:
                item.bind('<ButtonPress-1>', self.SetState_cb, '+')
            form.ent2.bind('<Return>', self.SetState_cb, '+')
            form.counter = form.ifd.entryByName['statesCounter']['widget']
        if self.hasSlider:
            slider = form.ifd.entryByName['slider']['widget']
            slider.set(self.currentFrameIndex)
        #print 'returning form'
        return form
示例#18
0
    def buildForm(self, master=None, width=100, height=80, title=None):
        if self.form:
            self.form.deiconify()
            self.createKeyBindings()
            return
        self.master = master
        ifd = self.ifd = InputFormDescr(title=title)
        ifd.append({
            'name': 'fileopen',
            'widgetType': Tkinter.Button,
            'tooltip': "Opens file browser",
            'wcfg': {
                'text': "Save As:",
                'command': self.browseFile,
                'width': 0,
                'height': 0,
            },
            'gridcfg': {
                'sticky': 'w',
                'column': 0
            }
        })
        ifd.append({
            'name': 'filename',
            'widgetType': Pmw.EntryField,
            'tooltip': "type filename",
            'gridcfg': {
                'sticky': 'w',
                #'columnspan': 3},
                'columnspan': 2,
                'row': -1
            },
            'wcfg': {
                'command': self.getFileName,
                #'label_text':'Save As',
                'entry_width': 12,
                'value': self.fileName,
                #'labelpos':'w'}})
            }
        })

        ## ifd.append({'name':'fileopen',
        ##                     'widgetType':Tkinter.Button,
        ##                     'tooltip': "Open file browser",
        ##                     'wcfg':{'text':"...",
        ##                             'command': self.browseFile,
        ##                             'width': 0, 'height': 0,},
        ##                     'gridcfg':{'sticky':'w', 'column':2, 'row':-1}
        ##                     })
        ifd.append({
            'name': 'recordB',
            'widgetType': Tkinter.Checkbutton,
            'tooltip': 'start/stop recording',
            'wcfg': {
                'variable': self.RecVar,
                'bd': 2,
                'image': self.record1Icon,
                'width': self.record1Icon.width(),
                'height': self.record1Icon.height(),
                'indicatoron': 0,
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1
            },
            'command': self.record_cb
        })

        ifd.append({
            'name': 'pauseB',
            'widgetType': Tkinter.Checkbutton,
            'tooltip': 'pause/start recording',
            'wcfg': {
                'variable': self.PauseVar,
                'bd': 2,
                'image': self.pauseIcon,
                'width': self.pauseIcon.width(),
                'height': self.pauseIcon.height(),
                'indicatoron': 0,
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1
            },
            'command': self.pause_cb
        })

        ifd.append({
            'name': 'stopB',
            'widgetType': Tkinter.Button,
            'tooltip': 'stop recording',
            'wcfg': {
                'bd': 2,
                'image': self.stopIcon,
                'width': self.stopIcon.width(),
                'height': self.stopIcon.height(),
            },
            'gridcfg': {
                'sticky': 'nesw',
                'row': -1
            },
            'command': self.stop_cb
        })

        ##         ifd.append({'name': 'recordB',
        ##                     'widgetType': Tkinter.Button,
        ##                     'tooltip':'start/pause recording',
        ##                     'wcfg':{'bd':4,
        ##                             'image':self.recordIcon,
        ##                             'width':self.recordIcon.width(),
        ##                             'height':self.recordIcon.height()
        ##                             },
        ##                     'gridcfg':{'sticky':'nesw','row':-1},
        ##                     'command':self.record_cb})

        ##         ifd.append({'name': 'pauseB',
        ##                     'widgetType': Tkinter.Button,
        ##                     'tooltip':'pause recording',
        ##                     'wcfg':{'bd':4,
        ##                             'image':self.pauseIcon,
        ##                             'width':self.pauseIcon.width(),
        ##                             'height':self.pauseIcon.height()
        ##                             },
        ##                     'gridcfg':{'sticky':'nesw', 'row':-1},
        ##                     'command':self.pause_cb})

        ##         ifd.append({'name': 'modeB',
        ##                     'widgetType': Tkinter.Button,
        ##                     'text':'Change Mode',
        ##                     'tooltip':'opens panel to change video parameters',
        ##                     'wcfg':{'bd':4,
        ##                             'image':self.chmodIcon,
        ##                             'width':self.chmodIcon.width(),
        ##                             'height':self.chmodIcon.height()
        ##                             },
        ##                     'gridcfg':{'sticky':'nesw','row':-1},
        ##                     'command':self.setparams_cb })

        ##         ifd.append({'name': 'closeB',
        ##             'widgetType': Tkinter.Button,
        ##             'text':'Close',
        ##             'tooltip':'closes video recorder',
        ##             'wcfg':{'bd':2,
        ##                     'image':self.closeIcon,
        ##                     'width':self.closeIcon.width(),
        ##                     'height':self.closeIcon.height(),
        ##                     },
        ##             'gridcfg':{'sticky':'nesw','row':-1},
        ##             'command':self.close_cb})
        form = self.form = InputForm(self.master,
                                     None,
                                     descr=ifd,
                                     modal=0,
                                     blocking=0,
                                     closeWithWindow=1,
                                     onDestroy=self.close_cb)
        self.createKeyBindings()
        return form
示例#19
0
    def SetMode_cb(self, event=None):
        #print 'SetMode'
        #playMode options:
        #   0   play once and stop
        #   1   play continuously in 1 direction
        #   2   play once in 2 directions
        #   3   play continuously in 2 directions
        #play framerate is frame/per second
        if not hasattr(self, 'playModeForm'):
            self.playModeList = [
                'once and stop', 'continuously in 1 direction',
                'once in 2 directions', 'continuously in 2 directions'
            ]
            ifd2 = InputFormDescr(title='Set Play Mode')

            ifd2.append({
                'name': 'playModeLabel',
                'widgetType': Tkinter.Label,
                'wcfg': {
                    'text': 'play mode options:',
                    'font': (ensureFontCase('helvetica'), 12, 'bold')
                },
                'gridcfg': {
                    'sticky': 'w'
                }
            })

            ifd2.append({
                'name': 'playMode',
                'widgetType': Tkinter.Radiobutton,
                'defaultValue': self.playModeList[self.playMode],
                'listtext': self.playModeList,
                'gridcfg': {
                    'sticky': 'w'
                }
            })

            ifd2.append({
                'name': 'framerateTW',
                'widgetType': ThumbWheel,
                'tooltip': """Framerate to enforce during playback""",
                'gridcfg': {
                    'sticky': 'we'
                },
                'wcfg': {
                    'value': self.framerate,
                    'oneTurn': 100.,
                    'type': 'float',
                    'continuous': True,
                    'wheelPad': 2,
                    'width': 145,
                    'height': 18,
                    'labCfg': {
                        'text': 'framerate:  '
                    },
                },
            })

            ifd2.append({
                'name': 'startFrameTW',
                'widgetType': ThumbWheel,
                'tooltip': """First frame used in playback""",
                'gridcfg': {
                    'sticky': 'we'
                },
                'wcfg': {
                    'value': self.startFrame,
                    'oneTurn': 100,
                    'type': 'int',
                    'continuous': True,
                    'wheelPad': 2,
                    'width': 145,
                    'height': 18,
                    'labCfg': {
                        'text': 'start frame: '
                    },
                },
            })

            ifd2.append({
                'name': 'endFrameTW',
                'widgetType': ThumbWheel,
                'tooltip': """Last frame used in playback""",
                'gridcfg': {
                    'sticky': 'we'
                },
                'wcfg': {
                    'value': self.endFrame,
                    'oneTurn': 100,
                    'type': 'int',
                    'continuous': True,
                    'wheelPad': 2,
                    'width': 145,
                    'height': 18,
                    'labCfg': {
                        'text': ' end frame: '
                    },
                },
            })

            ifd2.append({
                'name': 'stepSizeTW',
                'widgetType': ThumbWheel,
                'tooltip': """???""",
                'gridcfg': {
                    'sticky': 'we'
                },
                'wcfg': {
                    'value': self.stepSize,
                    'oneTurn': 100,
                    'type': 'int',
                    'continuous': True,
                    'wheelPad': 2,
                    'width': 145,
                    'height': 18,
                    'labCfg': {
                        'text': ' step size:  '
                    },
                },
            })

            ifd2.append({
                'name': 'acceptB',
                'widgetType': Tkinter.Button,
                'wcfg': {
                    'text': 'ok',
                    'command': self.setPlayMode_cb,
                },
                'gridcfg': {
                    'sticky': 'nesw'
                }
            })

            ifd2.append({
                'name': 'cancelB',
                'widgetType': Tkinter.Button,
                'wcfg': {
                    'text': 'cancel',
                    'command': self.cancelPlayMode_cb,
                },
                'gridcfg': {
                    'sticky': 'nesw',
                    'row': -1,
                    'column': 1
                }
            })
            if self.master is None:
                master = self.root
            else:
                master = Tkinter.Toplevel()
            self.playModeForm = InputForm(master,
                                          None,
                                          descr=ifd2,
                                          modal=0,
                                          blocking=0)
            self.playModeVar = self.playModeForm.descr.entryByName['playMode'][
                'variable']
            self.framerateWidget = self.playModeForm.descr.entryByName[
                'framerateTW']['widget']
            self.startFrameWidget = self.playModeForm.descr.entryByName[
                'startFrameTW']['widget']
            self.endFrameWidget = self.playModeForm.descr.entryByName[
                'endFrameTW']['widget']
            self.stepSizeWidget = self.playModeForm.descr.entryByName[
                'stepSizeTW']['widget']
        else:
            self.playModeForm.deiconify()
示例#20
0
    def showForm(self):
        """create formdescr for setAnim
        form to set the animation:
        each frame is a list of geom to display
        """

        entryFrame = []
        for i in range(len(self.framelist)):
            val = 'frame_' + str(i)
            entryFrame.append((val, ))

        if not hasattr(self, 'form_Setanim'):
            ifd = InputFormDescr(title="SetAnimation")
            ifd.append({
                'widgetType': ListChooser,
                'name': 'availableGeom',
                'tooltip': 'geom available in viewer',
                'wcfg': {
                    'mode': 'extended',
                    'lbwcfg': {
                        'exportselection': 1
                    },
                    'command': [(self.toggleExpansion, '<Double-Button-1>')],
                    'commandEvent': None,
                    'title': 'availableGeom'
                },
                'gridcfg': {
                    'row': 0,
                    'column': 0,
                    'sticky': 'wens',
                    'rowspan': 3
                }
            })
            ifd.append({
                'name': 'newframe',
                'widgetType': Tkinter.Button,
                'tooltip': """ Add an empty frame to the animation""",
                'wcfg': {
                    'text': 'NewFrame',
                    'command': self.addframe_cb
                },
                'gridcfg': {
                    'row': 0,
                    'column': 1,
                    'rowspan': 1
                }
            })

            ifd.append({
                'name': 'add',
                'widgetType': Tkinter.Button,
                'tooltip': """ Add the selected geom to selected frame""",
                'wcfg': {
                    'text': 'AddGeom',
                    'command': self.add_cb
                },
                'gridcfg': {
                    'row': 1,
                    'column': 1,
                    'rowspan': 1
                }
            })

            ifd.append({
                'name': 'geomtoload',
                'widgetType': ListChooser,
                'tooltip': """list of frame  the user chose to
                        apply to the pattern""",
                'wcfg': {
                    'entries': entryFrame,
                    'mode': 'extended',
                    'lbwcfg': {
                        'exportselection': 0
                    },
                    'title': 'Frame(geom) to be display'
                },
                'gridcfg': {
                    'sticky': 'we',
                    'row': 0,
                    'column': 2,
                    'rowspan': 3
                }
            })
            ifd.append({
                'name': 'remove',
                'widgetType': Tkinter.Button,
                'tooltip': """ Remove the selected entry from the
                        commands to be applied to the object when loaded in the application""",
                'wcfg': {
                    'text': 'REMOVE',
                    'width': 10,
                    'command': self.remove_cb
                },
                'gridcfg': {
                    'sticky': 'we',
                    'row': 0,
                    'column': 3
                }
            })

            ifd.append({
                'name': 'oneup',
                'widgetType': Tkinter.Button,
                'tooltip': """Move the selected entry up one entry""",
                'wcfg': {
                    'text': 'Move up',
                    'width': 10,
                    'command': self.moveup_cb
                },
                'gridcfg': {
                    'sticky': 'we',
                    'row': 1,
                    'column': 3
                }
            })

            ifd.append({
                'name': 'onedown',
                'widgetType': Tkinter.Button,
                'tooltip': """Move the selected entry down one entry""",
                'wcfg': {
                    'text': 'Move down',
                    'width': 10,
                    'command': self.movedown_cb
                },
                'gridcfg': {
                    'sticky': 'we',
                    'row': 2,
                    'column': 3
                }
            })

            self.form_Setanim = InputForm(self.master,
                                          None,
                                          descr=ifd,
                                          scrolledFrame=0)

            self.lc = self.form_Setanim.descr.entryByName['availableGeom'][
                'widget']
            self.lc2 = self.form_Setanim.descr.entryByName['geomtoload'][
                'widget']
            self.addObject(self.viewer.rootObject, None)
            val = self.form_Setanim.go()
            if val:
                self.assign()
                self.form_Setanim.withdraw()
        else:
            self.form_Setanim.deiconify()
            val = self.form_Setanim.go()
            if val:
                self.assign()
                self.form_Setanim.withdraw()
示例#21
0
    def SetMode_cb(self, event=None):
        #print 'SetMode'
        #playMode options:
        #   0   play once and stop
        #   1   play continuously in 1 direction
        #   2   play once in 2 directions
        #   3   play continuously in 2 directions
        #play framerate is frame/per second
        if not hasattr(self, 'playModeForm'):
            self.showPlayMode = Tkinter.IntVar()
            self.showFrameParmWidgets = Tkinter.IntVar()
            self.playModeVar = Tkinter.StringVar()
            self.playModeVar.set('once and stop')
            self.playModeList=[ 'once and stop', 
                                'continuously in 1 direction',
                                'once in 2 directions', 
                                'continuously in 2 directions']
            self.frameParmsList=[ 'framerateLabel','framerateTW','startFrameLabel', 
                                  'startFrameTW', 'endFrameLabel', 'endFrameTW', 
                                  'stepSizeLabel', 'stepSizeTW']

            #self.showListVar = Tkinter.IntVar()
            ifd2 = InputFormDescr(title='Set Play Options')    
            ## ifd2.append({'name':'selectCB',
##                 'widgetType': Tkinter.Checkbutton,
##                 'tooltip':'show ids of current ordered conformation list',
##                 'wcfg':{ 'text':'Show Conf List',
##                         #'command': self.showStatesList,
##                         #'variable': self.showListVar,
##                        },
##                 'gridcfg':{'sticky':'ew', 'row':-1, 'column':1}})
##                 #'gridcfg':{'sticky':'ew'}})
            ifd2.append({'name':'playModeMb',
                'widgetType': Tkinter.Menubutton,
                'tooltip':'set play mode choice',
                'wcfg':{ 'text':'Play Mode',
                       },
                'gridcfg':{'sticky':'we'}})
                #'gridcfg':{'sticky':'w', 'columnspan':2}})
            ifd2.append({'name':'adjustFrameParmsMb',
                'widgetType': Tkinter.Checkbutton,
                'tooltip':'opens panel to set play rate, start conf number, end conf number \nand step size for playing conf sequence',
                'wcfg':{ 'text':'Play Parameters',
                        'command': self.showFrameParms_cb,
                        'variable': self.showFrameParmWidgets,
                       },
                'gridcfg':{'sticky':'w', 'row':-1, 'column':1}})
            ifd2.append( {'name': 'framerateLabel',
                    'widgetType':Tkinter.Label,
                    'wcfg':{'text':'frame rate:',
                        'font':(ensureFontCase('helvetica'),12,'bold')},
                    'gridcfg':{'sticky':'w'}})
            ifd2.append({'name': 'framerateTW',
                    'wtype':ThumbWheel,
                    'widgetType':ThumbWheel,
                    'tooltip':'set max num of confs to be displayed per second',
                    'wcfg':{'labCfg':{'fg':'black', 'side':'left', 'text':''},
                        'showLabel':1, 'width':100,
                        'min':0,
                        'max':100,
                        'lockBMin':1,
                        'lockBMax':0,
                        'lockBIncrement':1,
                        'value':self.framerate,
                        'oneTurn':100,
                        'type':'float',
                        'increment':.1,
                        'callback':self.setMode_cb,
                        'canvascfg':{'bg':'red'},
                        'wheelLabcfg1':{'font':(ensureFontCase('times'),14,'bold')},
                        'wheelLabcfg2':{'font':(ensureFontCase('times'),14,'bold')},
                        'continuous':0, 'wheelPad':1, 'height':20},
                    'gridcfg':{'sticky':'nesw', 'row':-1, 'column':1}})
            ifd2.append( {'name': 'startFrameLabel',
                    'widgetType':Tkinter.Label,
                    'wcfg':{'text':'start frame:',
                        'font':(ensureFontCase('helvetica'),12,'bold')},
                    'gridcfg':{'sticky':'w'}})
            ifd2.append({'name': 'startFrameTW',
                    'wtype':ThumbWheel,
                    'widgetType':ThumbWheel,
                    'tooltip':'set number of first conf to be displayed',
                    'wcfg':{
                        'labCfg':{
                            'fg':'black',
                            'side':'left',
                            'text':''
                            },
                        'showLabel':1, 'width':100,
                        'min':0,
                        'max':self.endFrame,
                        'lockBMin':0,
                        'lockBMax':1,
                        'lockBIncrement':1,
                        'value':self.startFrame,
                        'oneTurn':10,
                        'type':'int',
                        'increment':1,
                        'callback':self.setMode_cb,
                        'canvascfg':{'bg':'green'},
                        'wheelLabcfg1':{'font':(ensureFontCase('times'),14,'bold')},
                        'wheelLabcfg2':{'font':(ensureFontCase('times'),14,'bold')},
                        'continuous':0, 'wheelPad':1, 'height':20},
                    'gridcfg':{'sticky':'ew', 'row':-1,  'column':1}})
            ifd2.append( {'name': 'endFrameLabel',
                    'widgetType':Tkinter.Label,
                    'wcfg':{'text':'end frame:',
                        'font':(ensureFontCase('helvetica'),12,'bold')},
                    'gridcfg':{'sticky':'w'}})
            ifd2.append({'name': 'endFrameTW',
                    'wtype':ThumbWheel,
                    'widgetType':ThumbWheel,
                    'tooltip':'set number of last conf to be displayed',
                    'wcfg':{
                        'labCfg':{
                            'fg':'black',
                            'side':'left',
                            'text':''
                            },
                        'showLabel':1, 'width':100,
                        'min':self.startFrame,
                        'max':self.maxFrame,
                        'lockBMin':1,
                        'lockBMax':0,
                        'lockBIncrement':1,
                        'value':self.endFrame,
                        'oneTurn':10,
                        'type':'int',
                        'increment':1,
                        'callback':self.setMode_cb,
                        'canvascfg':{'bg':'green'},
                        'wheelLabcfg1':{'font':(ensureFontCase('times'),14,'bold')},
                        'wheelLabcfg2':{'font':(ensureFontCase('times'),14,'bold')},
                        'continuous':0, 'wheelPad':1, 'height':20},
                    'gridcfg':{'sticky':'nesw', 'row':-1, 'column':1}})
            ifd2.append( {'name': 'stepSizeLabel',
                    'widgetType':Tkinter.Label,
                    'wcfg':{'text':'step size:',
                        'font':(ensureFontCase('helvetica'),12,'bold')},
                    'gridcfg':{'sticky':'w'}})
            ifd2.append({'name': 'stepSizeTW',
                    'wtype':ThumbWheel,
                    'widgetType':ThumbWheel,
                    'tooltip':'set step before next conf number: default is 1',
                    'wcfg':{
                        'labCfg':{
                            'fg':'black',
                            'side':'left',
                            'text':''
                            },
                        'showLabel':1, 'width':100,
                        'min':1,
                        'max':1000,
                        'lockBMin':1,
                        'lockBMax':0,
                        'lockBIncrement':1,
                        'value':self.stepSize,
                        'oneTurn':10,
                        'type':'int',
                        'increment':1,
                        'callback':self.setMode_cb,
                        'canvascfg':{'bg':'blue'},
                        'wheelLabcfg1':{'font':(ensureFontCase('times'),14,'bold')},
                        'wheelLabcfg2':{'font':(ensureFontCase('times'),14,'bold')},
                        'continuous':0, 'wheelPad':1, 'height':20},
                    'gridcfg':{'sticky':'nesw', 'row':-1, 'column':1}})
            ifd2.append({'name':'buildB',
                'widgetType': Tkinter.Button,
                'tooltip':'build a new molecule with current conf coords\nand add it to viewer',
                'wcfg':{ 'text':'Build Current',
                        'command': self.Build_cb,
                       },
                'gridcfg':{'sticky':'we'}})
                #'gridcfg':{'sticky':'ew', 'row':-1, 'column':1}})

            ifd2.append({'name':'writeB',
                'widgetType': Tkinter.Button,
                'tooltip':'write a new file with current conf coords',
                'wcfg':{ 'text':'Write Current',
                        'command': self.Write_cb,
                       },
                #'gridcfg':{'sticky':'we'}})
                'gridcfg':{'sticky':'nesw', 'row':-1, 'column':1}})         

            ifd2.append({'name':'cancelB',
                        'widgetType': Tkinter.Button,
                        'wcfg':{
                            'text': 'Close',
                            'command': self.cancelPlayMode_cb,
                        },
                        #'gridcfg':{'sticky':'ew', 'row':-1, 'column':1}})
                        'gridcfg':{'sticky':'ew','columnspan':2}}),
            self.playModeForm = InputForm(self.master, self.root,
                        descr = ifd2,
                        modal = 0, blocking = 0)
            self.framerateWidget = ifd2.entryByName['framerateTW']['widget']
            self.startFrameWidget = ifd2.entryByName['startFrameTW']['widget']
            self.endFrameWidget = ifd2.entryByName['endFrameTW']['widget']
            self.stepSizeWidget = ifd2.entryByName['stepSizeTW']['widget']
            self.frameParmCfgs = []
            self.frameParmWidgets = []
            for i in self.frameParmsList:
                ent = ifd2.entryByName[i]
                self.frameParmCfgs.append(ent['gridcfg'])
                self.frameParmWidgets.append(ent['widget'])
            self.playModeMb = ifd2.entryByName['playModeMb']['widget']
            self.playModeMb.bind('<ButtonPress>', self.buildPlayModeMenu, add='+')
            self.showFrameParms_cb()
            #self.showList = ifd2.entryByName['selectCB']['widget']
        else:
            self.playModeVar.set(self.playModeList[self.playMode])
            self.framerateWidget.set(self.framerate)
            self.startFrameWidget.set(self.startFrame)
            self.endFrameWidget.set(self.endFrame)
            self.stepSizeWidget.set(self.stepSize)
            self.playModeForm.deiconify()
        self.playModeForm.autoSize()