⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfbox_getparam.py

📁 toolbox for spm 5 for data, model free analysis
💻 PY
字号:
#!/usr/bin/env python# -*- coding: utf-8 -*-# generated by wxGlade 0.6.3 on Fri Jun 13 15:05:49 2008import wximport mfbox_xmlparseimport sysdef log(t):    sys.stderr.write(t+"\n")def getintfunctions(intType_input,intType_spin,prng):    def change_intType_input(event):        t = 1        try:            t = int(float(intType_input.GetValue()))        except:            pass        t = max(min(t,prng[1]),prng[0])        intType_input.SetValue(str(t))        event.Skip()    def up_intType_spin(event):        t = 1        try:            t = int(float(intType_input.GetValue()))+1        except:            pass        t = max(min(t,prng[1]),prng[0])        intType_input.SetValue(str(t))        event.Skip()    def down_intType_spin(event):        t = 1        try:            t = int(float(intType_input.GetValue()))-1        except:            pass        t = max(min(t,prng[1]),prng[0])        intType_input.SetValue(str(t))        event.Skip()    return (change_intType_input,up_intType_spin,down_intType_spin)def getfloatfunctions(floatType_input,floatType_slider,prng):    def change_floatType_input(event):        t = 1        try:            t = float(floatType_input.GetValue())        except:            pass        t = max(min(t,prng[1]),prng[0])        floatType_input.SetValue(str(t))        floatType_slider.SetValue(int(100*(t-prng[0])/(prng[1]-prng[0])))        event.Skip()    def change_floatType_slider(event):        t = int(floatType_slider.GetValue())        t = (prng[0]*(100.0-1.0*t)+prng[1]*(1.0*t))/100.0        floatType_input.SetValue(str(t))        event.Skip()        def setfn(t):        return int(100*(float(t)-prng[0])/(prng[1]-prng[0]))    return (change_floatType_input,change_floatType_slider,setfn)class MfboxConfig(wx.Frame):    app = None    getsetter = None    params = None    def __init__(self, *args, **kwds):        kwds["style"] = wx.DEFAULT_FRAME_STYLE        self.params = kwds.pop('params')        self.app = kwds.pop('app')        wx.Frame.__init__(self, *args, **kwds)        self.title = wx.StaticText(self, -1, _("%s configuration"%(self.params['name'])), style=wx.ALIGN_CENTRE)        self.run_button = wx.Button(self, -1, _("Run ..."), style=wx.BU_EXACTFIT)        self.__set_properties()            layout = []        self.getsetter = {}        for name,par in self.params.items():            if name=='name':                continue            if par['type']=='int':                prng = (int(par['min']),int(par['max']))                intType_label = wx.StaticText(self, -1, _(name), style=wx.ALIGN_LEFT)                intType_input = wx.TextCtrl(self, -1, str(prng[0]), style=wx.TE_RIGHT|wx.TE_PROCESS_ENTER)                intType_spin = wx.SpinButton(self, -1)                intType_input.SetMinSize((50, 21))                intType_spin.SetMinSize((100, 18))                fncs = getintfunctions(intType_input,intType_spin,prng)                self.Bind(wx.EVT_TEXT_ENTER, fncs[0], intType_input)                self.Bind(wx.EVT_SPIN_UP, fncs[1], intType_spin)                self.Bind(wx.EVT_SPIN_DOWN, fncs[2], intType_spin)                intType_sizer = wx.BoxSizer(wx.HORIZONTAL)                intType_sizer.Add(intType_input, 0, wx.LEFT|wx.ALIGN_CENTER_HORIZONTAL, 0)                intType_sizer.Add(intType_spin, 0, wx.RIGHT|wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0)                layout.append([intType_label,intType_sizer])                self.getsetter[name] = {'set':[(intType_input.SetValue,lambda t:str(int(t)))],'get':[(intType_input.GetValue,int)]}            elif par['type']=='float':                prng = (float(par['min']),float(par['max']))                floatType_label = wx.StaticText(self, -1, _(name), style=wx.ALIGN_LEFT)                floatType_input = wx.TextCtrl(self, -1, str(prng[0]), style=wx.TE_RIGHT|wx.TE_PROCESS_ENTER)                floatType_slider = wx.Slider(self, -1, 0, 0, 100)                floatType_input.SetMinSize((50, 21))                floatType_slider.SetMinSize((100, 18))                fncs = getfloatfunctions(floatType_input,floatType_slider,prng)                self.Bind(wx.EVT_TEXT_ENTER, fncs[0], floatType_input)                self.Bind(wx.EVT_COMMAND_SCROLL, fncs[1], floatType_slider)                self.Bind(wx.EVT_COMMAND_SCROLL_ENDSCROLL, fncs[1], floatType_slider)                floatType_sizer = wx.BoxSizer(wx.HORIZONTAL)                floatType_sizer.Add(floatType_input, 0, wx.LEFT|wx.ALIGN_CENTER_HORIZONTAL, 0)                floatType_sizer.Add(floatType_slider, 0, wx.RIGHT|wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0)                layout.append([floatType_label,floatType_sizer])                self.getsetter[name] = {'set':[(floatType_input.SetValue,str),(floatType_slider.SetValue,fncs[2])],'get':[(floatType_input.GetValue,float)]}            elif par['type']=='boolean':                booleanType_label = wx.StaticText(self, -1, _(name), style=wx.ALIGN_LEFT)                booleanType_checkbox = wx.CheckBox(self, -1, '')                booleanType_sizer = wx.BoxSizer(wx.HORIZONTAL)                booleanType_sizer.Add(booleanType_checkbox, 0, wx.RIGHT|wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0)                layout.append([booleanType_label,booleanType_sizer])                self.getsetter[name] = {'set':[(booleanType_checkbox.SetValue,lambda x:x=='on')],'get':[(booleanType_checkbox.GetValue,lambda x:['off','on'][int(x)])]}            elif par['type']=='choice':                choiceType_label = wx.StaticText(self, -1, _(name), style=wx.ALIGN_LEFT)                choiceType_choice = wx.Choice(self, -1, choices=[x for x in par['choices']])                choiceType_sizer = wx.BoxSizer(wx.HORIZONTAL)                choiceType_sizer.Add(choiceType_choice, 0, wx.LEFT|wx.ALIGN_CENTER_HORIZONTAL, 0)                layout.append([choiceType_label,choiceType_sizer])                self.getsetter[name] = {'set':[(choiceType_choice.SetStringSelection,str)],'get':[(choiceType_choice.GetStringSelection,str)]}         self.__do_layout(len(layout),layout)        self.Bind(wx.EVT_BUTTON, self.run_clicked, self.run_button)        self.Bind(wx.EVT_CLOSE, self.close_clicked, self)    def __set_properties(self):        self.SetTitle(_("%s config"%(self.params['name'])))        self.title.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))    def __do_layout(self, param_num, params):                main_sizer = wx.FlexGridSizer(3, 1, 20, 0)        parameter_sizer = wx.FlexGridSizer(param_num, 2, 10, 10)        main_sizer.Add(self.title, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 3)        for l in params:            parameter_sizer.Add(l[0], 0, wx.ALIGN_LEFT|wx.FIXED_MINSIZE, 0)            parameter_sizer.Add(l[1], 1, wx.RIGHT|wx.ALIGN_RIGHT, 0)        main_sizer.Add(parameter_sizer, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0)        main_sizer.Add(self.run_button, 0, wx.ALL|wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)        vbox = wx.BoxSizer(wx.VERTICAL)        vbox.Add(main_sizer,1,wx.EXPAND | wx.ALL, 10)        self.SetSizer(vbox)        vbox.Fit(self)        #self.SetSizer(main_sizer)        #main_sizer.Fit(self)        #main_sizer.SetSizeHints(self)        self.Layout()    def run_clicked(self, event):        self.Close()        self.app.buttons['run'] = 1        self.getParams()        event.Skip()    def close_clicked(self, event):        self.app.buttons['close'] = 1        event.Skip()    def setParams(self):        for name in self.params.keys():            if name=='name':                continue            gs = self.getsetter[name]            for w,c in gs['set']:                w(c(self.app.params[name]))    def getParams(self):        for name in self.params.keys():            if name=='name':                continue            gs = self.getsetter[name]            for w,c in gs['get']:                self.app.params[name] = c(w())class MfboxConfigurator(wx.App):    params = None    buttons = {'run':0,'close':0}    config = None    def __init__(self, *args, **kwds):        self.params = kwds.pop('params')        wx.App.__init__(self, *args, **kwds)    def OnInit(self):        wx.InitAllImageHandlers()        params = {}        for j in self.params.keys():            if j.find("_")<0:                if j+"_type" in self.params.keys():                    params[j] = {'type':self.params[j+'_type']}                    if params[j]['type'] in ['int','float']:                        if j+"_min" in self.params.keys() and j+"_max" in self.params.keys():                            params[j]['min'] = self.params[j+'_min']                            params[j]['max'] = self.params[j+'_max']                        else: # dont have min/max                            params.pop(j)                    elif params[j]['type']=='choice':                        if j+"_choices" in self.params.keys():                            params[j]['choices'] = self.params[j+'_choices']                        else: # dont have min/max                            params.pop(j)                    elif params[j]['type']=='boolean':                        pass                    else: # remove unhandled paramtypes                        params.pop(j)        params['name'] = self.params['type']['name']        self.config = MfboxConfig(None, -1, "", params=params, app=self)        self.config.setParams()        self.SetTopWindow(self.config)        self.config.Show()        return 1    def UpdateParams(self):        self.config.setParams()if __name__ == "__main__":    import gettext    gettext.install("mfbox_getparam") # replace with the appropriate catalog name    xmlmarshal = mfbox_xmlparse.MfboxXmlMarshal()    xmlunmarshal = mfbox_xmlparse.MfboxXmlUnmarshal()    p = xmlunmarshal.loads(sys.stdin.readline().strip())    mfbox_config = MfboxConfigurator(0,params=p)    while reduce(lambda x,y:x+y,mfbox_config.buttons.values(),0)==0:        mfbox_config.MainLoop()    p = mfbox_config.params    b = mfbox_config.buttons    x = {'params':p,'buttons':b}    sys.stdout.write(xmlmarshal.dumps(x))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -