Changeset 4912 for trunk/GSASIIctrlGUI.py
- Timestamp:
- May 20, 2021 5:26:45 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIctrlGUI.py
r4911 r4912 637 637 elif self.type is float: 638 638 try: 639 if type(val) is str: val = val.replace(',','.') 639 640 val = float(val) # convert strings, if needed 640 641 except: … … 839 840 # allow for above and sind, cosd, sqrt, tand, pi, and abbreviations 840 841 # also addition, subtraction, division, multiplication, exponentiation 841 self.validchars = '0123456789.-+eE/cosindcqrtap()* '842 self.validchars = '0123456789.-+eE/cosindcqrtap()*,' 842 843 else: 843 844 self.validchars = None … … 882 883 except (ValueError, SyntaxError): 883 884 if self.typ is float: # for float values, see if an expression can be evaluated 884 val = G2py3.FormulaEval(tc.GetValue() )885 val = G2py3.FormulaEval(tc.GetValue().replace(',','.')) 885 886 if val is None: 886 887 tc.invalid = True … … 2496 2497 2497 2498 ''' 2498 # TODO: better to generalize this for int & float, use validated text control, OK as default. 2499 # then make SingleFloatDialog & SingleIntDialog as wrappers. Would be good to remove the %-style 2500 # format, too. 2501 def __init__(self,parent,title,prompt,value,limits=[0.,1.],format='%.5g'): 2499 def __init__(self,parent,title,prompt,value,limits=[0.,1.],fmt='%.5g'): 2502 2500 wx.Dialog.__init__(self,parent,-1,title, 2503 2501 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 2504 self.panel = None 2505 self.limits = limits 2506 self.value = value 2507 self.prompt = prompt 2508 self.format = format 2509 self.Draw() 2510 2511 def Draw(self): 2512 2513 def OnValItem(event): 2514 if event: event.Skip() 2515 try: 2516 val = float(valItem.GetValue()) 2517 if self.limits[0] is not None and val < self.limits[0]: 2518 raise ValueError 2519 if self.limits[1] is not None and val > self.limits[1]: 2520 raise ValueError 2521 except ValueError: 2522 val = self.value 2523 self.value = val 2524 valItem.SetValue(self.format%(self.value)) 2525 2526 if self.panel: self.panel.Destroy() 2527 self.panel = wx.Panel(self) 2502 self.CenterOnParent() 2528 2503 mainSizer = wx.BoxSizer(wx.VERTICAL) 2529 mainSizer.Add(wx.StaticText(self.panel,-1,self.prompt),0,wx.ALIGN_CENTER) 2530 valItem = wx.TextCtrl(self.panel,-1,value=self.format%(self.value),style=wx.TE_PROCESS_ENTER) 2504 mainSizer.Add(wx.StaticText(self,-1,prompt),0,wx.ALIGN_CENTER) 2505 #valItem = wx.TextCtrl(self,-1,value=self.format%(self.value),style=wx.TE_PROCESS_ENTER) 2506 self.buffer = {0:float(fmt%(value))} 2507 a,b = fmt[1:].split('.') 2508 f = b[-1] 2509 try: 2510 d = int(b[:-1]) 2511 except: 2512 d = 5 2513 try: 2514 w = int(a) 2515 except: 2516 w = 3+d 2517 self.OKbtn = wx.Button(self,wx.ID_OK) 2518 CancelBtn = wx.Button(self,wx.ID_CANCEL) 2519 valItem = ValidatedTxtCtrl(self,self.buffer,0,nDig=(w,d,f), 2520 xmin=limits[0],xmax=limits[1], 2521 OKcontrol=self.ControlOKButton) 2531 2522 mainSizer.Add(valItem,0,wx.ALIGN_CENTER) 2532 valItem.Bind(wx.EVT_TEXT_ENTER,OnValItem) 2533 valItem.Bind(wx.EVT_KILL_FOCUS,OnValItem) 2534 OkBtn = wx.Button(self.panel,-1,"Ok") 2535 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 2536 CancelBtn = wx.Button(self.panel,-1,'Cancel') 2523 self.OKbtn.Bind(wx.EVT_BUTTON, self.OnOk) 2537 2524 CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 2538 2525 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 2539 2526 btnSizer.Add((20,20),1) 2540 btnSizer.Add( OkBtn)2527 btnSizer.Add(self.OKbtn) 2541 2528 btnSizer.Add(CancelBtn) 2542 2529 btnSizer.Add((20,20),1) 2543 2530 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 2544 self.panel.SetSizer(mainSizer) 2545 self.panel.Fit() 2531 self.SetSizer(mainSizer) 2546 2532 self.Fit() 2547 2533 2548 2534 def GetValue(self): 2549 return self. value2535 return self.buffer[0] 2550 2536 2551 2537 def OnOk(self,event): … … 2558 2544 if parent is not None: parent.Raise() 2559 2545 self.EndModal(wx.ID_CANCEL) 2546 2547 def ControlOKButton(self,setvalue): 2548 '''Enable or Disable the OK button for the dialog. Note that this is 2549 passed into the ValidatedTxtCtrl for use by validators. 2550 2551 :param bool setvalue: if True, all entries in the dialog are 2552 checked for validity. if False then the OK button is disabled. 2553 2554 ''' 2555 if setvalue: # turn button on, do only if all controls show as valid 2556 self.OKbtn.Enable() 2557 else: 2558 self.OKbtn.Disable() 2560 2559 2561 2560 class SingleIntDialog(SingleFloatDialog):
Note: See TracChangeset
for help on using the changeset viewer.