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()
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()
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()
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()
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']
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()
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()
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()
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()
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()
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
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
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
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()
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()
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()