guiqwt v2.2.1 documentation · guiqwt.label: labels, curve plot legends guiqwt.shapes: polygon,...

1639
index modules | next | guiqwt v2.2.1 documentation »

Transcript of guiqwt v2.2.1 documentation · guiqwt.label: labels, curve plot legends guiqwt.shapes: polygon,...

  • indexmodules |next |guiqwtv2.2.1documentation »

  • guiqwt

    BasedonPyQwt(plottingwidgetsforPyQt4graphicaluserinterfaces)andonthescientificmodulesNumPyandSciPy,guiqwtisaPythonlibraryprovidingefficient2Ddata-plottingfeatures(curve/imagevisualizationandrelatedtools)forinteractivecomputingandsignal/imageprocessingapplicationdevelopment.

    Externalresources:

    Bugreportsandfeaturerequests:GoogleCodeHelp,supportanddiscussionsaroundtheproject:GoogleGroup

    Contents:

    OverviewPerformancesFeaturesHowitworks

    InstallationDependenciesInstallation

    http://guiqwt.googlecode.comhttp://groups.google.fr/group/guidata_guiqwt

  • HelpandsupportHowtocontribute

    SubmittingchangesCodingguidelinesPyQtv4.4compatibilityissuesPyQt/PySidecompatibility

    ExamplesThetestlauncherCurveplottingCurvefittingImagevisualizationHistogramsOtherexamples

    Sift,theSignalandImageFilteringToolMakingexecutableWindowsprograms

    ExampleGUIQwtreference

    guiqwt.pyplotguiqwt.widgets.fitguiqwt.plotguiqwt.builderguiqwt.panelsguiqwt.signalsguiqwt.baseplotguiqwt.curveguiqwt.imageguiqwt.histogramguiqwt.cross_sectionguiqwt.annotationsguiqwt.shapes

  • indexmodules |next |guiqwtv2.2.1documentation »

    guiqwt.labelguiqwt.toolsguiqwt.stylesguiqwt.ioresizedialogrotatecrop

    Indicesandtables:

    IndexSearchPage

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |guiqwtv2.2.1documentation »

  • PythonModuleIndex

    a|b|c|g|h|i|l|p|s|t|w

    aguiqwt.annotationsbguiqwt.baseplotguiqwt.buildercguiqwt.cross_sectionguiqwt.curvegguiqwthguiqwt.histogramiguiqwt.imageguiqwt.iolguiqwt.label

  • indexmodules |guiqwtv2.2.1documentation »

    pguiqwt.panelsguiqwt.plotguiqwt.pyplotsguiqwt.shapesguiqwt.signalsguiqwt.stylestguiqwt.toolswguiqwt.widgetsguiqwt.widgets.fitguiqwt.widgets.resizedialogguiqwt.widgets.rotatecrop

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • Overview

    BasedonPyQwt(plottingwidgetsforPyQt4graphicaluserinterfaces)andonthescientificmodulesNumPyandSciPy,guiqwtisaPythonlibraryprovidingefficient2Ddata-plottingfeatures(curve/imagevisualizationandrelatedtools)forinteractivecomputingandsignal/imageprocessingapplicationdevelopment.

  • PerformancesThemostpopularPythonmodulefordataplottingiscurrentlymatplotlib,anopen-sourcelibraryprovidingalotofplottypesandanAPI(thepylabinterface)whichisveryclosetoMATLAB’splottinginterface.

    guiqwtplottingfeaturesarequitelimitedintermsofplottypescomparedtomatplotlib.Howeverthecurrentlyimplementedplottypesaremuchmoreefficient.Forexample,theguiqwtimageshowingfunction(guiqwt.pyplot.imshow())donotmakeanycopyofthedisplayeddata,henceallowingtoshowimageswhicharemuchlargerthanwithitsmatplotlib‘scounterpart.Inotherterms,whenshowinga30-MBimage(16-bitsunsignedintegersforexample)withguiqwt,noadditionalmemoryiswastedtodisplaytheimage(exceptfortheoffscreenimageofcoursewhichdependsonthewindowsize)whereasmatplotlibtakesmorethan600-MBofadditionalmemory(theoriginalarrayisduplicatedfourtimesusing64-bitsfloatdatatypes).

  • FeaturesTheguiqwtlibraryalsoprovidesthefollowingfeatures:

    guiqwt.pyplot:equivalenttomatplotlib.pyplot,atleastfortheimplementedfunctions

    supportedplotitems:

    guiqwt.curve:curvesanderrorbarcurvesguiqwt.histogram:1Dhistogramsguiqwt.image:images(RGBimagesarenotsupported),imageswithnon-linearx/yscales,imageswithspecifiedpixelsize(e.g.loadedfromDICOMfiles),2Dhistograms,pseudo-colorimages(pcolor)guiqwt.label:labels,curveplotlegendsguiqwt.shapes:polygon,polylines,rectangle,circle,ellipseandsegmentguiqwt.annotations:annotatedshapes(shapeswithlabelsshowingpositionanddimensions):rectanglewithcenterpositionandsize,circlewithcenterpositionanddiameter,ellipsewithcenterpositionanddiameters(theseitemsareveryusefultomeasurethingsdirectlyondisplayedimages)

    curves,imagesandshapes:

    multipleobjectselectionformovingobjectsor

  • editingtheirpropertiesthroughautomaticallygenerateddialogboxes(guidata)itemlistpanel:moveobjectsfromforegroundtobackground,show/hideobjects,removeobjects,...customizableaspectratioalotofready-to-usetools:plotcanvasexporttoimagefile,imagesnapshot,imagerectangularfilter,etc.

    curves:

    intervalselectiontoolswithlabelsshowingresultsofcomputingonselectedareacurvefittingtoolwithautomaticfit,manualfitwithsliders,...

    images:

    contrastadjustmentpanel:selecttheLUTbymovingarangeselectionobjectontheimagelevelshistogram,eliminateoutliers,...X-axisandY-axiscross-sections:supportformultipleimages,averagecross-sectiontoolonarectangulararea,...applyanyaffinetransformtodisplayedimagesinreal-time(rotation,magnification,translation,horizontal/verticalflip,...)

    applicationdevelopmenthelpers:

    ready-to-usecurveandimageplotwidgetsand

  • dialogboxes(seeguiqwt.plot)load/savegraphicalobjects(curves,images,shapes)alotoftestscriptswhichdemonstrateguiqwtfeatures(seeexamples)

  • HowitworksAguiqwt-basedplottingwidgetmaybeconstructedusingoneofthefollowingmethods:

    Interactivemode:whenmanipulatingandvisualizingdatainaninteractivePythonorIPythoninterpreter,the:py:mod`guiqwt.pyplot`moduleprovidetheeasiestwaytoplotcurves,showimagesandmore.SyntaxissimilartoMATLAB’s,thusveryeasytolearnandtouseinteractively.Scriptmode:whenmanipulatingandvisualizingdatausingascript,the:py:mod`guiqwt.pyplot`moduleisstillagoodchoiceaslongasyoudon’tneedtocustomizethefiguregraphicaluserinterface(GUI)layout.However,ifyouwanttoaddotherwidgetstotheGUI,likemenus,buttonsandsoon,youshouldratheruseplottingwidgetclassesinsteadofthepyplothelperfunctions.

    Therearetwokindsofplottingwidgetsdefinedinguiqwt:

    low-levelplottingwidgets:guiqwt.curve.CurvePlotandguiqwt.image.ImagePlothigh-levelplottingwidgets(ready-to-usewidgetswithintegratedtoolsandpanels):guiqwt.plot.CurveWidgetandguiqwt.plot.ImageWidget,andcorrespondingdialogboxesguiqwt.plot.CurveDialogandguiqwt.plot.ImageDialog

  • Curve-relatedwidgetswithintegratedplotmanager:

    Image-relatedwidgetswithintegratedplotmanager:

    Seealso

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    Moduleguiqwt.curve

    Moduleprovidingcurve-relatedplotitemsandplottingwidgets

    Moduleguiqwt.image

    Moduleprovidingimage-relatedplotitemsandplottingwidgets

    Moduleguiqwt.plot

    Moduleprovidingready-to-usecurveandimageplottingwidgetsanddialogboxes

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • Installation

  • Dependencies

    Requirements:

    Python2.x(x>=5)PyQt44.x(x>=3;recommendedx>=4)PyQwt5.x(x>=2)guidata1.3.2orlaterNumPy1.x(x>=3)–NumPy1.6orlaterisrequiredforWindowsbinariesSciPy0.x(x>=7)PIL1.1.x(x>=6)

    OptionalPythonmodules:

    spyderlib2.1forSiftembeddedPythonconsolepydicom0.9.x(x>=4)forDICOMfilesI/Ofeatures

  • InstallationAllplatforms:

    Thesetup.pyscriptsupportsthefollowingextraoptionsforoptimizingtheimagescalerenginewithSSE2/SSE3processors:--sse2and--sse3

    OnGNU/LinuxandMacOSplatforms:pythonsetup.pybuildinstall

    IfgfortranisnotyourdefaultFortrancompiler:

    pythonsetup.pybuild--fcompiler=gfortraninstall

    orifitfails,youmaytrythefollowing:pythonsetup.pybuild_ext--fcompiler=gnu95buildinstall

    OnWindowsplatforms(requiresMinGWwithgfortran):pythonsetup.pybuild-cmingw32install

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    Helpandsupport

    Externalresources:

    Bugreportsandfeaturerequests:GoogleCodeHelp,supportanddiscussionsaroundtheproject:GoogleGroup

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://guiqwt.googlecode.comhttp://groups.google.fr/group/guidata_guiqwthttp://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • Howtocontribute

  • SubmittingchangesDuetoconfidentialityissues,wearenotablefornowtopublishanysource-controlledrepository(evenifwedohaveaMercurialrepositoryfortheproject).However,thisdoesnotpreventmotivatedusersfromcontributingtotheprojectbysendingpatchesappliedtothelastpublishedversionofthelibrary.Tocompensatetheabsenceofsourcerepository,wetrytoupdatethelibraryasoftenaswecaninordertokeepthepublicsourcearchiveversionascloseaspossibletotheinternaldevelopmentversion.

  • CodingguidelinesIngeneral,wetrytofollowthestandardPythoncodingguidelines,whichcoveralltheimportantcodingaspects(docstrings,comments,namingconventions,importstatements,...)asdescribedhere:

    StyleGuideforPythonCode

    Theeasiestwaytocheckthatyourcodeisfollowingthoseguidelinesistorunpylint(anotegreaterthan8/10seemstobeareasonnablegoal).

    http://www.python.org/peps/pep-0008.html

  • PyQtv4.4compatibilityissuesTheprojecthastobecompatiblewithPyQt>=v4.4whichmeansthatthefollowingrecommendationsshouldbefollowed:

    avoidusingsuper:whenwritingclassesderivingfromaQObjectchildclass(i.e.almostanysingleclassimportedfromQtGuiorQtCore),thesuperbuiltin-functionshouldnotbeusedoutsidetheconstructormethod(calltheparentclassmethoddirectlyinstead)beforeusinganyfunctionormethodfromPyQt4,pleasecheckthatthefeatureyouareabouttousewasalreadyimplementedinPyQt4v4.4(morepreciselyintheQtversionusedinPyQt4v4.4)–ifnot,aworkaroundshouldbeimplementedtoavoidbreakingcompatibilitydonotusethePyQt-specificQFileDialogstaticmethods(notpresentinQt)whichwereintroducedinPyQtv4.6:getOpenFileNameAndFilter,getOpenFileNamesAndFilterandgetSaveFileNameAndFilter(guidataprovideswrappersaroundQFileDialogstaticmethodshandlingtheselectedfilterwhichweretakenfromthespyderliblibrary(frommodulespyderlib.qt.compat):theyareavailableinguidata.qt.compat)

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    PyQt/PySidecompatibilityInthenearfuture,theprojectwillbeofficiallycompatiblewithbothPyQtandPySide.

    Initscurrentimplementation,ithastobecompatiblewithPyQtAPI#1(oldPyQtversions)andAPI#2(PySide-compatibleAPI,PyQt>=v4.6),whichmeansthatthefollowingrecommendationsshouldbefollowed:

    QVariantobjectsmustnotbeused(API#2compatibility)QStringandQStringListobjectsmustnotbeused(API#2compatibility)Whenconnectingbuilt-inC++signalswhichwereoriginallymadetopassstrings(orstringlists),theargumentsshouldalwaysbeassumedtobeQString(orQStringList)objects(API#1compatibility)andsobeconvertedsystematicallytothePythonequivalentobject,i.e.unicode(orlist).

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • Examples

  • ThetestlauncherAlotofexamplesareavailableintheguiqwttestmodule

    fromguiqwtimportteststests.run()

    Thetwolinesaboveexecutetheguiqwttestlauncher:

  • Curveplotting

    Basiccurveplotting

    fromguidata.qt.QtGuiimportQFont

    fromguiqwt.plotimportCurveDialogfromguiqwt.builderimportmake

    defplot(*items):win=CurveDialog(edit=False,toolbar=True,wintitleoptions=dict(title="Title",xlabelylabel="ylabel"))plot=win.get_plot()foriteminitems:plot.add_item(item)plot.set_axis_font("left",QFont("Courier"))win.get_itemlist_panel().show()plot.set_items_readonly(False)win.show()win.exec_()

    deftest():"""Test"""#--CreateQApplicationimportguidata_app=guidata.qapplication()#--fromnumpyimportlinspace,sinx=linspace(-10,10,200)dy=x/100.y=sin(sin(sin(x)))x2=linspace(-10,10,20)y2=sin(sin(sin(x2)))plot(make.curve(x,y,color="b"),

  • make.curve(x2,y2,color="g",curvestyle="Sticks"make.curve(x,sin(2*y),color="r"),make.merror(x,y/2,dy),make.label("Relativepositionoutside"(x[0],y[0]),(-10,-10),"BR"),make.label("Relativepositioninside"(x[0],y[0]),(10,10),"TL"),make.label("Absoluteposition","R",(0,0),make.legend("TR"),make.marker(position=(5.,.8),label_cb=lambdamarkerstyle="|",movable=False)

    if__name__=="__main__":test()

    Computationsoncurves

    fromguiqwt.plotimportCurveDialogfromguiqwt.builderimportmake

  • defplot(*items):win=CurveDialog(edit=False,toolbar=True)plot=win.get_plot()foriteminitems:plot.add_item(item)win.show()win.exec_()

    deftest():"""Test"""#--CreateQApplicationimportguidata_app=guidata.qapplication()#--fromnumpyimportlinspace,sin,trapzx=linspace(-10,10,1000)y=sin(sin(sin(x)))

    curve=make.curve(x,y,"ab","b")range=make.range(-2,2)disp0=make.range_info_label(range,'BR',u"x=title="Rangeinfos"

    disp1=make.computation(range,"BL","trapz=%gcurve,lambdax,y:trapz

    disp2=make.computations(range,"TL",[(curve,"min=%.5f",lambda(curve,"max=%.5f",lambda(curve,"avg=%.5f",lambdalegend=make.legend("TR")plot(curve,range,disp0,disp1,disp2,legend

    if__name__=="__main__":test()

  • Curvefitting

    importnumpyasnp

    fromguiqwt.widgets.fitimportFitParam,guifit

    deftest():x=np.linspace(-10,10,1000)y=np.cos(1.5*x)+np.random.rand(x.shape[0])*.2deffit(x,params):a,b=paramsreturnnp.cos(b*x)+aa=FitParam("Offset",1.,0.,2.)b=FitParam("Frequency",2.,1.,10.,logscaleparams=[a,b]values=guifit(x,y,fit,params,xlabel="Time(s)"printvaluesprint[param.valueforparaminparams]

    if__name__=="__main__":test()

  • Imagevisualization

    Imagecontrastadjustment

    importos.pathasosp

    fromguiqwt.plotimportImageDialogfromguiqwt.builderimportmake

    deftest():"""Test"""#--CreateQApplicationimportguidata_app=guidata.qapplication()#--filename=osp.join(osp.dirname(__file__),"brain.png"image=make.image(filename=filename,title="Original"win=ImageDialog(edit=False,toolbar=True,wintitleoptions=dict(show_contrast=Trueplot=win.get_plot()plot.add_item(image)win.resize(600,600)win.show()try:plot.save_widget('contrast.png')exceptIOError:#Skippingthispartofthetest#becauseuserhasnowritepermissiononcurrentdirectorypasswin.exec_()

    if__name__=="__main__":test()

  • Imagecross-sections

    importos.pathasosp,numpyasnp

    fromguiqwt.plotimportImageDialogfromguiqwt.builderimportmake

    defcreate_window():win=ImageDialog(edit=False,toolbar=True,wintitleoptions=dict(show_xsection=Truewin.resize(600,600)returnwin

    deftest():"""Test"""#--CreateQApplicationimportguidata

  • _app=guidata.qapplication()#--filename=osp.join(osp.dirname(__file__),"brain.png"win=create_window()image=make.image(filename=filename,colormap=data2=np.array(image.data.T[200:],copy=True)image2=make.image(data2,title="Modified",alpha_maskplot=win.get_plot()plot.add_item(image)plot.add_item(image2,z=1)win.exec_()

    if__name__=="__main__":test()

  • TransformableimagesAffinetransformsexampleon3000x3000images(real-timetransforms):

    fromguidata.qt.QtCoreimportQRectFfromguidata.qt.QtGuiimportQImage

    importnumpyasnp

  • fromguiqwt.imageimportassemble_imageitemsfromguiqwt.plotimportImageDialogfromguiqwt.builderimportmakefromguiqwtimportio

    DEFAULT_CHARS="".join([chr(c)forcinrange(32,256

    defget_font_array(sz,chars=DEFAULT_CHARS):fromguidata.qt.QtGuiimportQFont,QPainter,QColorfont=QFont()font.setFixedPitch(True)font.setPixelSize(sz)font.setStyleStrategy(QFont.NoAntialias)dummy=QImage(10,10,QImage.Format_ARGB32)pnt=QPainter(dummy)pnt.setFont(font)metric=pnt.fontMetrics()rct=metric.boundingRect(chars)pnt.end()h=rct.height()w=rct.width()img=QImage(w,h,QImage.Format_ARGB32)paint=QPainter()paint.begin(img)paint.setFont(font)paint.setBrush(QColor(255,255,255))paint.setPen(QColor(255,255,255))paint.drawRect(0,0,w+1,h+1)paint.setPen(QColor(0,0,0))paint.setBrush(QColor(0,0,0))paint.drawText(0,paint.fontMetrics().ascent(),paint.end()data=img.bits().asstring(img.numBytes())npy=np.frombuffer(data,np.uint8)npy.shape=img.height(),img.bytesPerLine()/4,returnnpy[:,:,0]

  • deftxtwrite(data,x,y,sz,txt,range=None):arr=get_font_array(sz,txt)ifrangeisNone:m,M=data.min(),data.max()else:m,M=rangez=(float(M)-float(m))*np.array(arr,float)/255.arr=np.array(z,data.dtype)dy,dx=arr.shapedata[y:y+dy,x:x+dx]=arr

    defimshow(items,title=""):gridparam=make.gridparam(background="black",major_style=(".","gray"win=ImageDialog(edit=False,toolbar=True,wintitleoptions=dict(gridparam=gridparamnc=int(np.sqrt(len(items))+1.0)maxy=0y=0x=0w=Noneplot=win.get_plot()print"-"*80fori,iteminenumerate(items):h=item.boundingRect().height()ifi%nc==0:x=0y+=maxymaxy=helse:x+=wmaxy=max(maxy,h)w=item.boundingRect().width()

    item.set_transform(x,y,0.0)

  • print"Addingitem#%d..."%i,plot.add_item(item)print"Done"win.show()win.exec_()

    defcompute_image(NX,NY):BX,BY=40,40img=np.random.normal(0,100,size=(BX,BY))timg=np.fft.fftshift(np.fft.fft2(img))printtimg.shapecx=NX/2cy=NY/2bx2=BX/2by2=BY/2z=np.zeros((NX,NY),np.complex64)z[cx-bx2:cx-bx2+BX,cy-by2:cy-by2+BY]=timgz=np.fft.ifftshift(z)rev=np.fft.ifft2(z)returnnp.abs(rev)

    defget_bbox(items):r=QRectF()foritinitems:r=r.united(it.boundingRect())returnr

    defsave_image(name,data):io.imwrite(name+".u16.tif",data,dtype=np.uint16io.imwrite(name+".u8.png",data,dtype=np.uint8

    defbuild_image(items):r=get_bbox(items)x,y,w,h=r.getRect()print"Assembletest1:",w,"x",hdest=assemble_imageitems(items,r,w,h,alignprint"saving..."

  • save_image("test1.png",dest)print"Assembletest2:",w/4,"x",h/4dest=assemble_imageitems(items,r,w/4,h/4,save_image("test2.png",dest)

    deftest():"""Test"""N=500data=compute_image(N,N)m=data.min()M=data.max()items=[make.trimage(data,alpha_mask=True,colormapfortypein(np.uint8,np.uint16,np.int8,np.int16info=np.iinfo(type().dtype)s=float((info.max-info.min))a1=s*(data-m)/(M-m)img=np.array(a1+info.min,type)txtwrite(img,0,0,N/15.,str(type))items.append(make.trimage(img,colormap="jet"imshow(items,title=u"Transformtest(%dx%dimages)"returnitems

    if__name__=="__main__":#--CreateQApplicationimportguidata_app=guidata.qapplication()#--items=test()build_image(items)

  • Imagerectangularfilter

    fromscipy.ndimageimportgaussian_filter

    fromguiqwt.plotimportImageDialogfromguiqwt.builderimportmake

    defimshow(x,y,data,filter_area,yreverse=True):win=ImageDialog(edit=False,toolbar=True,wintitleoptions=dict(xlabel="x(cm)",yreverse=yreverseimage=make.xyimage(x,y,data)plot=win.get_plot()plot.add_item(image)xmin,xmax,ymin,ymax=filter_areaflt=make.imagefilter(xmin,xmax,ymin,ymax,filter=lambdax,y,data

  • plot.add_item(flt,z=1)plot.replot()win.show()win.exec_()

    deftest():"""Test"""#--CreateQApplicationimportguidata_app=guidata.qapplication()#--fromguiqwt.tests.imagexyimportcompute_imagex,y,data=compute_image()imshow(x,y,data,filter_area=(-3.,-1.,0.,2.#--importos.pathasosp,numpyasnpfromguiqwtimportiofilename=osp.join(osp.dirname(__file__),"brain.png"data=io.imread(filename,to_grayscale=True)x=np.linspace(0,30.,data.shape[1])y=np.linspace(0,30.,data.shape[0])imshow(x,y,data,filter_area=(10,20,5,15))

    if__name__=="__main__":test()

  • Histograms

    2-Dhistogram

    fromnumpyimportrandom,array,dot,concatenate

    fromguiqwt.plotimportImageDialogfromguiqwt.builderimportmakefromguiqwt.configimport_

    defhist2d(X,Y):win=ImageDialog(edit=True,toolbar=True,wintitle="2-DHistogramX0=(0,1),X1=(-1,-1)"hist2d=make.histogram2D(X,Y,200,200)curve=make.curve(X[::50],Y[::50],linestyle='',marker='+',titleplot=win.get_plot()plot.set_aspect_ratio(lock=False)plot.set_antialiasing(False)plot.add_item(hist2d)plot.add_item(curve)plot.set_item_visible(curve,False)win.show()win.exec_()

    if__name__=="__main__":importguidata_app=guidata.qapplication()N=150000m=array([[1.,.2],[-.2,3.]])X1=random.normal(0,.3,size=(N,2))X2=random.normal(0,.3,size=(N,2))X=concatenate((X1+[0,1.],dot(X2,m)+[-1,-1.hist2d(X[:,0],X[:,1])

  • Otherexamples

    Imageplottools

    importos.pathasosp

    fromguiqwt.plotimportImageDialogfromguiqwt.toolsimport(RectangleTool,EllipseToolMultiLineTool,FreeFormToolAnnotatedRectangleTool,AnnotatedEllipseToolAnnotatedSegmentTool,AnnotatedCircleToolAnnotatedPointTool,VCursorTool,HCursorTool,ObliqueRectangleTool,AnnotatedObliqueRectangleToolfromguiqwt.builderimportmake

    defcreate_window():win=ImageDialog(edit=False,toolbar=True,wintitle="Allimageandplottoolstest"fortoolklassin(LabelTool,HRangeTool,VCursorTool,HCursorTool,XCursorToolSegmentTool,RectangleTool,ObliqueRectangleToolCircleTool,EllipseTool,MultiLineTool,FreeFormTool,AnnotatedRectangleTool,AnnotatedObliqueRectangleToolAnnotatedCircleTool,AnnotatedEllipseToolAnnotatedSegmentTool,AnnotatedPointToolwin.add_tool(toolklass)returnwin

    deftest():"""Test"""#--CreateQApplicationimportguidata_app=guidata.qapplication()

  • #--filename=osp.join(osp.dirname(__file__),"brain.png"win=create_window()image=make.image(filename=filename,colormap=plot=win.get_plot()plot.add_item(image)win.exec_()

    if__name__=="__main__":test()

    Real-timeMandelbrotplotting

    importnumpyasnp

  • fromguidata.qt.QtCoreimportQRectF,QPointF

    fromguiqwt.configimport_fromguiqwt.plotimportImageDialogfromguiqwt.imageimportRawImageItemfromguiqwt.toolsimportToggleTool

    fromguiqwt._mandelimportmandelmandelbrot=mandel.mandelbrot

    classFullScale(ToggleTool):def__init__(self,parent,image):super(FullScale,self).__init__(parent,_(u"MAXresolution"self.image=imageself.minprec=image.IMAXself.maxprec=5*image.IMAXdefactivate_command(self,plot,checked):ifself.image.IMAX==self.minprec:self.image.IMAX=self.maxprecelse:self.image.IMAX=self.minprecself.image.set_lut_range([0,self.image.IMAXplot.replot()defupdate_status(self,plot):self.action.setChecked(self.image.IMAX==self

    classMandelItem(RawImageItem):def__init__(self,xmin,xmax,ymin,ymax):super(MandelItem,self).__init__(np.zeros((self.bounds=QRectF(QPointF(xmin,ymin),QPointF(xmax,ymax))self.update_border()self.IMAX=80self.set_lut_range([0,self.IMAX])

  • #----QwtPlotItemAPI------------------------------------------------------defdraw_image(self,painter,canvasRect,srcRectx1,y1=canvasRect.left(),canvasRect.top()x2,y2=canvasRect.right(),canvasRect.bottomi1,j1,i2,j2=srcRect

    NX=x2-x1NY=y2-y1ifself.data.shape!=(NX,NY):self.data=np.zeros((NX,NY),np.int16orig=complex(i1,j1)dx=(i2-i1)/(NX-1)dy=1j*(j2-j1)/(NY-1)NMAX=self.IMAXmandelbrot(orig,dx,dy,self.data,NMAX)self.data=self.data.TsrcRect=(0,0,NX,NY)x1,y1,x2,y2=canvasRect.getCoords()RawImageItem.draw_image(self,painter,canvasRectsrcRect,(x1,y1,x2

    defmandel():win=ImageDialog(edit=True,toolbar=True,wintitleoptions=dict(yreverse=False))mandel=MandelItem(-1.5,.5,-1.,1.)win.add_tool(FullScale,mandel)plot=win.get_plot()plot.set_aspect_ratio(lock=False)plot.add_item(mandel)plot.set_full_scale(mandel)win.show()win.exec_()

    if__name__=="__main__":

  • importguidata_app=guidata.qapplication()mandel()

    Simpleapplication

    fromguidata.qt.QtGuiimportQMainWindow,QMessageBoxfromguidata.qt.QtCoreimport(QSize,QT_VERSION_STRSIGNAL)fromguidata.qt.compatimportgetopenfilename

    importsys,platformimportnumpyasnp

  • fromguidata.dataset.datatypesimportDataSet,GetAttrPropfromguidata.dataset.dataitemsimport(IntItem,FloatArrayItemChoiceItem)fromguidata.dataset.qtwidgetsimportDataSetEditGroupBoxfromguidata.configtoolsimportget_iconfromguidata.qthelpersimportcreate_action,add_actionsfromguidata.utilsimportupdate_dataset

    fromguiqwt.configimport_fromguiqwt.plotimportImageWidgetfromguiqwt.builderimportmakefromguiqwt.signalsimportSIG_LUT_CHANGEDfromguiqwtimportio

    APP_NAME=_("Applicationexample")VERSION='1.0.0'

    classImageParam(DataSet):_hide_data=False_hide_size=Truetitle=StringItem(_("Title"),default=_("Untitled"data=FloatArrayItem(_("Data")).set_prop("display"hide=GetAttrPropwidth=IntItem(_("Width"),help=_("Imagewidth(pixels)"default=100).set_prop("display"hide=GetAttrPropheight=IntItem(_("Height"),help=_("Imageheight(pixels)"default=100).set_prop("display"hide=GetAttrProp

    classImageParamNew(ImageParam):_hide_data=True_hide_size=Falsetype=ChoiceItem(_("Type"),(("rand",_("random")),("zeros"

    classImageListWithProperties(QSplitter):

  • def__init__(self,parent):QSplitter.__init__(self,parent)self.imagelist=QListWidget(self)self.addWidget(self.imagelist)self.properties=DataSetEditGroupBox(_("Properties"self.properties.setEnabled(False)self.addWidget(self.properties)

    classCentralWidget(QSplitter):def__init__(self,parent,toolbar):QSplitter.__init__(self,parent)self.setContentsMargins(10,10,10,10)self.setOrientation(Qt.Vertical)imagelistwithproperties=ImageListWithPropertiesself.addWidget(imagelistwithproperties)self.imagelist=imagelistwithproperties.imagelistself.connect(self.imagelist,SIGNAL("currentRowChanged(int)"self.current_item_changed)self.connect(self.imagelist,SIGNAL("itemSelectionChanged()"self.selection_changed)self.properties=imagelistwithproperties.propertiesself.connect(self.properties,SIGNAL("apply_button_clicked()"self.properties_changed)self.imagewidget=ImageWidget(self)self.connect(self.imagewidget.plot,SIG_LUT_CHANGEDself.lut_range_changed)self.item=None#imageitemself.imagewidget.add_toolbar(toolbar,"default"self.imagewidget.register_all_image_tools()self.addWidget(self.imagewidget)

    self.images=[]#ListofImageParaminstancesself.lut_ranges=[]#ListofLUTranges

  • self.setStretchFactor(0,0)self.setStretchFactor(1,1)self.setHandleWidth(10)self.setSizes([1,2])defrefresh_list(self):self.imagelist.clear()self.imagelist.addItems([image.titleforimagedefselection_changed(self):"""Imagelist:selectionchanged"""row=self.imagelist.currentRow()self.properties.setDisabled(row==-1)defcurrent_item_changed(self,row):"""Imagelist:currentimagechanged"""image,lut_range=self.images[row],self.lut_rangesself.show_data(image.data,lut_range)update_dataset(self.properties.dataset,imageself.properties.get()deflut_range_changed(self):row=self.imagelist.currentRow()self.lut_ranges[row]=self.item.get_lut_rangedefshow_data(self,data,lut_range=None):plot=self.imagewidget.plotifself.itemisnotNone:self.item.set_data(data)iflut_rangeisNone:lut_range=self.item.get_lut_rangeself.imagewidget.set_contrast_range(*lut_rangeself.imagewidget.update_cross_sections()else:self.item=make.image(data)plot.add_item(self.item,z=0)

  • plot.replot()defproperties_changed(self):"""Theproperties'Apply'buttonwasclicked:updatingimage"""row=self.imagelist.currentRow()image=self.images[row]update_dataset(image,self.properties.datasetself.refresh_list()self.show_data(image.data)defadd_image(self,image):self.images.append(image)self.lut_ranges.append(None)self.refresh_list()self.imagelist.setCurrentRow(len(self.imagesplot=self.imagewidget.plotplot.do_autoscale()defadd_image_from_file(self,filename):image=ImageParam()image.title=unicode(filename)image.data=io.imread(filename,to_grayscaleimage.height,image.width=image.data.shapeself.add_image(image)

    classMainWindow(QMainWindow):def__init__(self):QMainWindow.__init__(self)self.setup()defsetup(self):"""Setupwindowparameters"""self.setWindowIcon(get_icon('python.png'))self.setWindowTitle(APP_NAME)self.resize(QSize(600,800))#Welcomemessageinstatusbar:

  • status=self.statusBar()status.showMessage(_("Welcometoguiqwtapplicationexample!"#Filemenufile_menu=self.menuBar().addMenu(_("File"new_action=create_action(self,_("New..."shortcut="Ctrl+N"icon=get_icon('filenew.png'tip=_("Createanewimage"triggered=self.new_imageopen_action=create_action(self,_("Open..."shortcut="Ctrl+O"icon=get_icon('fileopen.png'tip=_("Openanimage"triggered=self.open_imagequit_action=create_action(self,_("Quit"),shortcut="Ctrl+Q"icon=get_std_icontip=_("Quitapplication"triggered=self.closeadd_actions(file_menu,(new_action,open_action#Helpmenuhelp_menu=self.menuBar().addMenu("?")about_action=create_action(self,_("About..."icon=get_std_icontriggered=self.add_actions(help_menu,(about_action,))main_toolbar=self.addToolBar("Main")add_actions(main_toolbar,(new_action,open_action#Setcentralwidget:toolbar=self.addToolBar("Image")self.mainwidget=CentralWidget(self,toolbarself.setCentralWidget(self.mainwidget)

  • #------?defabout(self):QMessageBox.about(self,_("About")+APP_NAME"""%sv%s

    %sPierreRaybaut
    Copyright©2009-2010CEA

    Python%s,Qt%s,PyQt%s%s%s"""(APP_NAME,VERSION,_("Developpedby"QT_VERSION_STR,PYQT_VERSION_STR,_(#------I/Odefnew_image(self):"""Createanewimage"""imagenew=ImageParamNew(title=_("Createanewimage"ifnotimagenew.edit(self):returnimage=ImageParam()image.title=imagenew.titleifimagenew.type=='zeros':image.data=np.zeros((imagenew.width,elifimagenew.type=='rand':image.data=np.random.randn(imagenew.widthself.mainwidget.add_image(image)defopen_image(self):"""Openimagefile"""saved_in,saved_out,saved_err=sys.stdin,sys.stdout=Nonefilename,_filter=getopenfilename(self,_io.iohandlersys.stdin,sys.stdout,sys.stderr=saved_iniffilename:self.mainwidget.add_image_from_file(filenameif__name__=='__main__':fromguidataimportqapplicationapp=qapplication()window=MainWindow()

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    window.show()app.exec_()

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • Sift,theSignalandImageFilteringTool

    Siftisasimplesignalandimageprocessingapplicationbasedonguiqwtandguidata.

    NotethatSiftincludesanembeddedPythonconsoletomanipulatedirectlythesignalandimageobjects(seescreenshotbelow)–thisfeaturerequiresspyderlib(successfullytestedwithSpyderv2.0.10andv2.1.0dev).

  • Evenifitcouldbeextendedwithpowerfulfeatureslikeitsclosed-sourcecounterpart,Siftisquitelimitedinitscurrentimplementation.Fornow,itsmainpurposeistoshowhowtocreateeasilyandrapidlyyourownsignal/imageprocessingapplicationusingguidataandguiqwt.

  • fromguidata.qt.QtGuiimport(QMainWindow,QMessageBoxQVBoxLayout,QHBoxLayoutQMenu,QApplication,QCursorfromguidata.qt.QtCoreimportQt,QT_VERSION_STR,PYQT_VERSION_STRfromguidata.qt.compatimportgetopenfilenames,getsavefilename

    importsys,platform,os.pathasosp,osimportnumpyasnp

    fromguidata.dataset.datatypesimportDataSet,ValuePropfromguidata.dataset.dataitemsimport(IntItem,FloatArrayItemChoiceItem,FloatItemBoolItem)fromguidata.dataset.qtwidgetsimportDataSetEditGroupBoxfromguidata.configtoolsimportget_iconfromguidata.qthelpersimportcreate_action,add_actionsfromguidata.qtwidgetsimportDockableWidget,DockableWidgetMixin

  • fromguidata.utilsimportupdate_dataset

    fromguiqwt.configimport_fromguiqwt.plotimportCurveWidget,ImageWidgetfromguiqwt.builderimportmake

    APP_NAME=_("Sift")APP_DESC=_("""SignalandImageFilteringTool
    Simplesignalandimageprocessingapplicationbasedonguiqwtandguidata"""VERSION='0.2.6'

    defnormalize(yin,parameter='maximum'):"""Normalizeinputarray*yin*withrespecttoparameter*parameter*Supportvaluesfor*parameter*:'maximum'(default),'amplitude','sum','energy'"""axis=len(yin.shape)-1ifparameter=='maximum':maximum=np.max(yin,axis)ifaxis==1:maximum=maximum.reshape((len(maximum),maxarray=np.tile(maximum,yin.shape[axis])returnyin/maxarrayelifparameter=='amplitude':ytemp=np.array(yin,copy=True)minimum=np.min(yin,axis)ifaxis==1:minimum=minimum.reshape((len(minimum),ytemp-=minimumreturnnormalize(ytemp,parameter='maximum'elifparameter=='sum':returnyin/yin.sum()elifparameter=='energy':returnyin/(yin*yin.conjugate()).sum()

  • else:raiseRuntimeError("Unsupportedparameter%s

    defxy_fft(x,y):"""ComputeFFTonX,Ydata"""y1=np.fft.fft(y)x1=np.fft.fftshift(np.fft.fftfreq(x.shape[-1],returnx1,y1defxy_ifft(x,y):"""ComputeiFFTonX,Ydata"""y1=np.fft.ifft(y)x1=np.fft.fftshift(np.fft.fftfreq(x.shape[-1],returnx1,y1defflatfield(rawdata,flatdata):"""Computeflat-fieldcorrection"""dtemp=np.array(rawdata,dtype=np.float64,copydunif=np.array(flatdata,dtype=np.float64,copydunif[dunif==0]=1.returnnp.array(dtemp/dunif,dtype=rawdata.dtype

    classSignalParam(DataSet):title=StringItem(_("Title"),default=_("Untitled"xydata=FloatArrayItem(_("Data"),transpose=Truedefcopy_data_from(self,other,dtype=None):self.xydata=np.array(other.xydata,copy=Truedefchange_data_type(self,dtype):self.xydata=np.array(self.xydata,dtype=dtypedefget_data(self):ifself.xydataisnotNone:returnself.xydata[1]defset_data(self,data):self.xydata[1]=datadata=property(get_data,set_data)

  • classSignalParamNew(DataSet):title=StringItem(_("Title"),default=_("Untitled"xmin=FloatItem("Xmin",default=-10.)xmax=FloatItem("Xmax",default=10.)size=IntItem(_("Size"),help=_("Signalsize(totalnumberofpoints)"min=1,default=500)type=ChoiceItem(_("Type"),(("rand",_("random")),("zeros"("gauss",_("gaussian"))))

    classImageParam(DataSet):title=StringItem(_("Title"),default=_("Untitled"data=FloatArrayItem(_("Data"))metadata=DictItem(_("Metadata"),default=Nonedefcopy_data_from(self,other,dtype=None):self.data=np.array(other.data,copy=True,defchange_data_type(self,dtype):self.data=np.array(self.data,dtype=dtype

    classImageParamNew(DataSet):title=StringItem(_("Title"),default=_("Untitled"height=IntItem(_("Height"),help=_("Imageheight(totalnumberofrows)"min=1,default=500)width=IntItem(_("Width"),help=_("Imagewidth(totalnumberofcolumns)"min=1,default=500)dtype=ChoiceItem(_("Datatype"),((np.uint8,"uint8"),(np.int16(np.float32,"float32"),(np))type=ChoiceItem(_("Type"),(("zeros",_("zeros")),("empty"("rand",_("random")),))

    classObjectFT(QSplitter):

  • """Objecthandlingtheitemlist,theselecteditempropertiesandplot"""PARAMCLASS=NonePREFIX=Nonedef__init__(self,parent,plot):super(ObjectFT,self).__init__(Qt.Vertical,self.plot=plotself.objects=[]#signalsorimagesself.items=[]#associatedplotitemsself.listwidget=Noneself.properties=Noneself._hsplitter=Noneself.file_actions=Noneself.edit_actions=Noneself.operation_actions=Noneself.processing_actions=Noneself.number=0

    #Objectselectiondependentactionsself.actlist_1more=[]self.actlist_2more=[]self.actlist_1=[]self.actlist_2=[]#------Setupwidget,menus,actionsdefsetup(self,toolbar):self.listwidget=QListWidget()self.listwidget.setAlternatingRowColors(Trueself.listwidget.setSelectionMode(QListWidgetself.properties=DataSetEditGroupBox(_("Properties"self.properties.setEnabled(False)

    self.connect(self.listwidget,SIGNAL("currentRowChanged(int)"self.current_item_changed)self.connect(self.listwidget,SIGNAL("itemSelectionChanged()"self.selection_changed)

  • self.connect(self.properties,SIGNAL("apply_button_clicked()"self.properties_changed)properties_stretched=QWidget()hlayout=QHBoxLayout()hlayout.addWidget(self.properties)#hlayout.addStretch()vlayout=QVBoxLayout()vlayout.addLayout(hlayout)vlayout.addStretch()properties_stretched.setLayout(vlayout)self.addWidget(self.listwidget)self.addWidget(properties_stretched)

    #Editactionsduplicate_action=create_action(self,_("Duplicate"icon=get_icontriggered=selfself.actlist_1+=[duplicate_action]remove_action=create_action(self,_("Remove"icon=get_icon(triggered=selfself.actlist_1more+=[remove_action]self.edit_actions=[duplicate_action,remove_action#Operationactionssum_action=create_action(self,_("Sum"),average_action=create_action(self,_("Average"triggered=selfdiff_action=create_action(self,_("Difference"triggered=self.compute_differenceprod_action=create_action(self,_("Product"triggered=self.compute_productdiv_action=create_action(self,_("Division"triggered=self.compute_divisionself.actlist_2more+=[sum_action,average_action

  • self.actlist_2+=[diff_action,div_action]self.operation_actions=[sum_action,average_actiondiff_action,prod_action

    #------GUIrefresh/setupdefcurrent_item_changed(self,row):ifrow!=-1:update_dataset(self.properties.dataset,self.properties.get()

    def_get_selected_rows(self):return[index.row()forindexinself.listwidget.selectionModel().selectedRowsdefselection_changed(self):"""Signallist:selectionchanged"""row=self.listwidget.currentRow()self.properties.setDisabled(row==-1)self.refresh_plot()nbrows=len(self._get_selected_rows())foractinself.actlist_1more:act.setEnabled(nbrows>=1)foractinself.actlist_2more:act.setEnabled(nbrows>=2)foractinself.actlist_1:act.setEnabled(nbrows==1)foractinself.actlist_2:act.setEnabled(nbrows==2)defmake_item(self,row):raiseNotImplementedErrordefupdate_item(self,row):raiseNotImplementedErrordefrefresh_plot(self):foriteminself.items:

  • ifitemisnotNone:item.hide()forrowinself._get_selected_rows():item=self.items[row]ifitemisNone:item=self.make_item(row)self.plot.add_item(item)else:self.update_item(row)self.plot.set_item_visible(item,Trueself.plot.set_active_item(item)self.plot.do_autoscale()defrefresh_list(self,new_current_row='current'"""new_current_row:integer,'first','last','current'"""row=self.listwidget.currentRow()self.listwidget.clear()self.listwidget.addItems(["%s%03d:%s"%(selffori,objinenumerateifnew_current_row=='first':row=0elifnew_current_row=='last':row=self.listwidget.count()-1elifisinstance(new_current_row,int):row=new_current_rowelse:assertnew_current_row=='current'ifrow<self.listwidget.count():self.listwidget.setCurrentRow(row)defproperties_changed(self):"""Theproperties'Apply'buttonwasclicked:updatingsignal"""row=self.listwidget.currentRow()update_dataset(self.objects[row],self.propertiesself.refresh_list(new_current_row='current'self.listwidget.setCurrentRow(row)self.refresh_plot()

  • defadd_object(self,obj):self.objects.append(obj)self.items.append(None)self.refresh_list(new_current_row='last')self.listwidget.setCurrentRow(len(self.objectsself.emit(SIGNAL('object_added()'))#------Editoperationsdefduplicate_object(self):row=self._get_selected_rows()[0]obj=self.objects[row]objcopy=self.PARAMCLASS()objcopy.title=obj.titleobjcopy.copy_data_from(obj)self.objects.insert(row+1,objcopy)self.items.insert(row+1,None)self.refresh_list(new_current_row=row+1)self.refresh_plot()defremove_object(self):rows=sorted(self._get_selected_rows(),reverseforrowinrows:self.objects.pop(row)item=self.items.pop(row)self.plot.del_item(item)self.refresh_list(new_current_row='first')self.refresh_plot()#------Operationsdefcompute_sum(self):rows=self._get_selected_rows()sumobj=self.PARAMCLASS()sumobj.title="+".join(["%s%03d"%(self.PREFIXtry:forrowinrows:obj=self.objects[row]

  • ifsumobj.dataisNone:sumobj.copy_data_from(obj)else:sumobj.data+=obj.dataexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnself.add_object(sumobj)defcompute_average(self):rows=self._get_selected_rows()sumobj=self.PARAMCLASS()title=",".join(["%s%03d"%(self.PREFIX,sumobj.title=_("Average")+("(%s)"%titleoriginal_dtype=self.objects[rows[0]].datatry:forrowinrows:obj=self.objects[row]ifsumobj.dataisNone:sumobj.copy_data_from(obj,dtypeelse:sumobj.data+=obj.dataexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnsumobj.data/=float(len(rows))sumobj.change_data_type(dtype=original_dtypeself.add_object(sumobj)defcompute_product(self):rows=self._get_selected_rows()

  • sumobj=self.PARAMCLASS()sumobj.title="*".join(["%s%03d"%(self.PREFIXtry:forrowinrows:obj=self.objects[row]ifsumobj.dataisNone:sumobj.copy_data_from(obj)else:sumobj.data*=obj.dataexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnself.add_object(sumobj)defcompute_difference(self):rows=self._get_selected_rows()diffobj=self.PARAMCLASS()diffobj.title="-".join(["%s%03d"%(self.forrowinrows])try:obj0,obj1=self.objects[rows[0]],selfdiffobj.copy_data_from(obj0)diffobj.data=obj0.data-obj1.dataexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnself.add_object(diffobj)defcompute_division(self):rows=self._get_selected_rows()diffobj=self.PARAMCLASS()

  • diffobj.title="/".join(["%s%03d"%(self.forrowinrows])try:obj0,obj1=self.objects[rows[0]],selfdiffobj.copy_data_from(obj0)diffobj.data=obj0.data/obj1.dataexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnself.add_object(diffobj)#------DataProcessingdefapply_11_func(self,obj,orig,func,param):ifparamisNone:obj.data=func(orig.data)else:obj.data=func(orig.data,param)defcompute_11(self,name,func,param=None,one_param_for_allsuffix=None):ifparamisnotNoneandone_param_for_all:ifnotparam.edit(parent=self.parent()):returnrows=self._get_selected_rows()forrowinrows:ifparamisnotNoneandnotone_param_for_allifnotparam.edit(parent=self.parentreturnorig=self.objects[row]obj=self.PARAMCLASS()obj.title="%s(%s%03d)"%(name,self.ifsuffixisnotNone:obj.title+="|"+suffix(param)obj.copy_data_from(orig)

  • self.emit(SIGNAL("status_message(QString)"_("Computing:")+""+obj.titleQApplication.setOverrideCursor(QCursor(self.repaint()try:self.apply_11_func(obj,orig,func,exceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),_(u"Error:")+"\nreturnfinally:self.emit(SIGNAL("status_message(QString)"QApplication.restoreOverrideCursor()self.add_object(obj)classSignalFT(ObjectFT):PARAMCLASS=SignalParamPREFIX="s"#------ObjectFTAPIdefsetup(self,toolbar):ObjectFT.setup(self,toolbar)#Fileactionsnew_action=create_action(self,_("Newsignal..."icon=get_icon('filenew.png'tip=_("Createanewsignal"triggered=self.new_signalopen_action=create_action(self,_("Opensignal..."icon=get_icon('fileopen.png'tip=_("Openasignal"triggered=self.open_signalsave_action=create_action(self,_("Savesignal..."icon=get_icon('filesave.png'tip=_("Saveselectedsignal"triggered=self.save_signal

  • self.actlist_1more+=[save_action]self.file_actions=[new_action,open_action

    #Operationactionsroi_action=create_action(self,_("ROIextraction"triggered=self.extract_roiswapaxes_action=create_action(self,_("SwapX/Yaxes"triggered=selfself.actlist_1more+=[roi_action,swapaxes_actionself.operation_actions+=[None,roi_action#Processingactionsnormalize_action=create_action(self,_("Normalize"triggered=selflincal_action=create_action(self,_("Linearcalibration"triggered=selfgaussian_action=create_action(self,_("Gaussianfilter"triggered=selfwiener_action=create_action(self,_("Wienerfilter"triggered=selffft_action=create_action(self,_("FFT"),tip=_("Warning:onlyrealpartisplotted"triggered=self.compute_fftifft_action=create_action(self,_("InverseFFT"tip=_("Warning:onlyrealpartisplotted"triggered=self.compute_ifftself.actlist_1more+=[normalize_action,lincal_actiongaussian_action,wiener_actionfft_action,ifft_actionself.processing_actions=[normalize_actiongaussian_action,fft_action,ifft_actionadd_actions(toolbar,[new_action,open_action

    defmake_item(self,row):signal=self.objects[row]

  • data=signal.xydataiflen(data)==2:#x,ysignalx,y=dataitem=make.mcurve(x,y.real,label=signaleliflen(data)==4:#x,y,dx,dyerrorbarsignalx,y,dx,dy=dataitem=make.merror(x,y.real,dx,dy,labelelse:raiseRuntimeError,"datanotsupported"self.items[row]=itemreturnitemdefupdate_item(self,row):signal=self.objects[row]item=self.items[row]data=signal.xydataiflen(data)==2:#x,ysignalx,y=dataitem.set_data(x,y.real)eliflen(data)==4:#x,y,dx,dyerrorbarsignalx,y,dx,dy=dataitem.set_data(x,y.real,dx,dy)item.curveparam.label=signal.title#------Signaloperationsdefextract_roi(self):classROIParam(DataSet):row1=IntItem(_("Firstrowindex"),defaultrow2=IntItem(_("Lastrowindex"),defaultparam=ROIParam(_("ROIextraction"))self.compute_11("ROI",lambdax,y,p:(x.copyy.copyparam,suffix=lambdap:u"rows=%d:%d"defswap_axes(self):self.compute_11("SwapAxes",lambdax,y:(y

  • #------SignalProcessingdefapply_11_func(self,obj,signal,func,paramdata=signal.xydataiflen(data)==2:#x,ysignalx,y=dataifparamisNone:obj.xydata=func(x,y)else:obj.xydata=func(x,y,param)eliflen(data)==4:#x,y,dx,dyerrorbarsignalx,y,dx,dy=dataifparamisNone:x2,y2=func(x,y)_x3,dy2=func(x,dy)else:x2,y2=func(x,y,param)dx2,dy2=func(dx,dy,param)obj.xydata=x2,y2,dx,dy2defnormalize(self):methods=((_("maximum"),'maximum'),(_("amplitude"),'amplitude'),(_("sum"),'sum'),(_("energy"),'energy'))classNormalizeParam(DataSet):method=ChoiceItem(_("Normalizewithrespectto"param=NormalizeParam(_("Normalize"))deffunc(x,y,p):returnx,normalize(y,p.method)self.compute_11("Normalize",func,param,suffix=lambdap:u"ref=%s"defcalibrate(self):axes=(('x',_("X-axis")),('y',_("Y-axis"classCalibrateParam(DataSet):axis=ChoiceItem(_("Calibrate"),axes,

  • a=FloatItem('a',default=1.)b=FloatItem('b',default=0.)param=CalibrateParam(_("Linearcalibration"deffunc(x,y,p):ifp.axis=='x':returnp.a*x+p.b,yelse:returnx,p.a*y+p.bself.compute_11("LinearCal",func,param,suffix=lambdap:u"%s=%s*%sdefcompute_wiener(self):importscipy.signalasspsdeffunc(x,y):returnx,sps.wiener(y)self.compute_11("WienerFilter",func)defcompute_gaussian(self):classGaussianParam(DataSet):sigma=FloatItem(u"σ",default=1.)param=GaussianParam(_("Gaussianfilter"))importscipy.ndimageasspideffunc(x,y,p):returnx,spi.gaussian_filter1d(y,p.sigmaself.compute_11("GaussianFilter",func,paramsuffix=lambdap:u"σ=%.3fpixels"defcompute_fft(self):self.compute_11("FFT",xy_fft)defcompute_ifft(self):self.compute_11("iFFT",xy_ifft)#------I/Odefnew_signal(self):"""Createanewsignal"""

  • signalnew=SignalParamNew(title=_("Createanewsignal"rows=self._get_selected_rows()ifrows:signalnew.size=len(self.objects[rows[signalnew.title="%s%d"%(signalnew.titleifnotsignalnew.edit(parent=self.parent()):returnself.number+=1signal=SignalParam()signal.title=signalnew.titlexarr=np.linspace(signalnew.xmin,signalnewifsignalnew.type=='zeros':signal.xydata=np.vstack((xarr,np.zeroselifsignalnew.type=='rand':signal.xydata=np.vstack((xarr,np.randomelifsignalnew.type=='gauss':classGaussParam(DataSet):a=FloatItem("Norm",default=1.)x0=FloatItem("X0",default=0.0)sigma=FloatItem(u"σ",default=5.)param=GaussParam(_("Newgaussianfunction"ifnotparam.edit(parent=self.parent()):returnygauss=param.a*np.exp(-.5*((xarr-paramsignal.xydata=np.vstack((xarr,ygaussself.add_object(signal)defopen_signal(self):"""Opensignalfile"""saved_in,saved_out,saved_err=sys.stdin,sys.stdout=Nonefilters='%s(*.txt*.csv)\n%s(*.npy)'\%(_(u"Textfiles"),_(u"NumPyarrays"filenames,_filter=getopenfilenames(self.filterssys.stdin,sys.stdout,sys.stderr=saved_infilenames=list(filenames)

  • forfilenameinfilenames:filename=unicode(filename)os.chdir(osp.dirname(filename))signal=SignalParam()signal.title=filenametry:ifosp.splitext(filename)[1]==".npy"xydata=np.load(filename)else:fordelimiterin('\t',',',''try:xydata=np.loadtxt(filenamebreakexceptValueError:continueelse:raiseassertlen(xydata.shape)in(1,2),exceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),(_(u"%scouldnotbeopened:")"\n"+str(msg))returniflen(xydata.shape)==1:xydata=np.vstack((np.arange(xydataelse:rows,cols=xydata.shapeforcolnbin(2,3,4):ifcols==colnbandrows>colnbxydata=xydata.Tbreakifcols==3:#x,y,dyxarr,yarr,dyarr=xydatadxarr=np.zeros_like(dyarr)

  • xydata=np.vstack((xarr,yarr,signal.xydata=xydataself.add_object(signal)defsave_signal(self):"""Saveselectedsignal"""rows=self._get_selected_rows()forrowinrows:filename,_filter=getsavefilename(self_(u"CSVfiles"ifnotfilename:returnfilename=unicode(filename)os.chdir(osp.dirname(filename))obj=self.objects[row]try:np.savetxt(filename,obj.xydata,delimiterexceptException,msg:importtracebacktraceback.print_exc()QMessageBox.critical(self.parent(),(_(u"%scouldnotbewritten:""\n"+str(msg))return

    classImageFT(ObjectFT):PARAMCLASS=ImageParamPREFIX="i"#------ObjectFTAPIdefsetup(self,toolbar):ObjectFT.setup(self,toolbar)#Fileactionsnew_action=create_action(self,_("Newimage..."icon=get_icon('filenew.png'tip=_("Createanewimage"triggered=self.new_image

  • open_action=create_action(self,_("Openimage..."icon=get_icon('fileopen.png'tip=_("Openanimage"triggered=self.open_imagesave_action=create_action(self,_("Saveimage..."icon=get_icon('filesave.png'tip=_("Saveselectedimage"triggered=self.save_imageself.actlist_1more+=[save_action]self.file_actions=[new_action,open_action

    #Operationactionsrotate_menu=QMenu(_("Rotation"),self)hflip_action=create_action(self,_("Fliphorizontally"triggered=self.vflip_action=create_action(self,_("Flipvertically"triggered=self.rot90_action=create_action(self,_("Rotate90°right"triggered=self.rot270_action=create_action(self,_("Rotate90°left"triggered=selfrotate_action=create_action(self,_("Rotatearbitrarily..."triggered=selfresize_action=create_action(self,_("Resize"triggered=selfroi_action=create_action(self,_("ROIextraction"triggered=self.extract_roiswapaxes_action=create_action(self,_("SwapX/Yaxes"triggered=selfflatfield_action=create_action(self,_("Flat-fieldcorrection"triggered=selfself.actlist_1+=[resize_action]self.actlist_2+=[flatfield_action]self.actlist_1more+=[roi_action,swapaxes_actionhflip_action,vflip_actionrot90_action,rot270_actionadd_actions(rotate_menu,[hflip_action,vflip_action

  • rot90_action,rot270_actionself.operation_actions+=[None,rotate_menuresize_action,roi_actionNone,flatfield_action#Processingactionslincal_action=create_action(self,_("Linearcalibration"triggered=selfthreshold_action=create_action(self,_("Thresholding"triggered=selfclip_action=create_action(self,_("Clipping"triggered=self.compute_clipgaussian_action=create_action(self,_("Gaussianfilter"triggered=selfwiener_action=create_action(self,_("Wienerfilter"triggered=selffft_action=create_action(self,_("FFT"),tip=_("Warning:onlyrealpartisplotted"triggered=self.compute_fftifft_action=create_action(self,_("InverseFFT"tip=_("Warning:onlyrealpartisplotted"triggered=self.compute_ifftself.actlist_1more+=[lincal_action,threshold_actiongaussian_action,wiener_actionfft_action,ifft_actionself.processing_actions=[lincal_action,threshold_actionclip_action,Nonegaussian_action,ifft_action]add_actions(toolbar,[new_action,open_actiondefmake_item(self,row):image=self.objects[row]item=make.image(image.data.real,title=imageeliminate_outliers=2.)self.items[row]=item

  • returnitemdefupdate_item(self,row):image=self.objects[row]item=self.items[row]lut_range=[item.min,item.max]item.set_data(image.data.real,lut_range=lut_rangeitem.imageparam.label=image.titleitem.plot().update_colormap_axis(item)#------Imageoperationsdefrotate_arbitrarily(self):boundaries=('constant','nearest','reflect'prop=ValueProp(False)classRotateParam(DataSet):angle=FloatItem(u"%s(°)"%_(u"Angle"mode=ChoiceItem(_(u"Mode"),zip(boundariesdefault=boundaries[0])cval=FloatItem(_("cval"),default=0.,help=_(u"Valueusedforpointsoutsidethe"u"boundariesoftheinputifmodeis"u"'constant'"))reshape=BoolItem(_(u"Reshapetheoutputarray"help=_(u"Reshapetheoutputarray"u"sothattheinputarrayis"u"containedcompletelyintheoutput"prefilter=BoolItem(_(u"Prefiltertheinputimage"default=True).set_proporder=IntItem(_(u"Order"),default=3,help=_("Splineinterpolationorder").set_prop("display",activeparam=RotateParam(_("Rotation"))importscipy.ndimageasspiself.compute_11("Rotate",lambdax,p:spi.rotate(x,p.angle,reshapeorder=p.order,mode

  • cval=p.cval,prefilterparam,suffix=lambdap:u"α=%(pdefrotate_90(self):self.compute_11("Rotate90",lambdax:np.rot90defrotate_270(self):self.compute_11("Rotate270",lambdax:np.rot90defflip_horizontally(self):self.compute_11("HFlip",lambdax:np.fliplrdefflip_vertically(self):self.compute_11("VFlip",lambdax:np.flipuddefresize_image(self):rows=self._get_selected_rows()obj=self.objects[rows[0]]original_size=obj.data.shape[1],obj.datafromguiqwt.widgets.resizedialogimportResizeDialogdlg=ResizeDialog(self.plot,new_size=original_sizeold_size=original_size,text=_("Destinationsize:"ifnotdlg.exec_():returnboundaries=('constant','nearest','reflect'prop=ValueProp(False)classResizeParam(DataSet):zoom=FloatItem(_(u"Zoom"),default=dlgmode=ChoiceItem(_(u"Mode"),zip(boundariesdefault=boundaries[0])cval=FloatItem(_("cval"),default=0.,help=_(u"Valueusedforpointsoutsidethe"u"boundariesoftheinputifmodeis"u"'constant'"))prefilter=BoolItem(_(u"Prefiltertheinputimage"

  • default=True).set_proporder=IntItem(_(u"Order"),default=3,help=_("Splineinterpolationorder").set_prop("display",activeparam=ResizeParam(_("Resize"))importscipy.ndimageasspiself.compute_11("Zoom",lambdax,p:spi.interpolation.zoom(x,pmode=prefilterparam,suffix=lambdap:u"zoom=defextract_roi(self):classROIParam(DataSet):row1=IntItem(_("Firstrowindex"),defaultrow2=IntItem(_("Lastrowindex"),defaultcol1=IntItem(_("Firstcolumnindex"),col2=IntItem(_("Lastcolumnindex"),param=ROIParam(_("ROIextraction"))self.compute_11("ROI",lambdax,p:x.copy()[p.row1:p.row2,p.col1param,suffix=lambdap:u"rows=%(p.row1,p.row2,p.col1,defswap_axes(self):self.compute_11("SwapAxes",lambdaz:z.T)defflat_field_correction(self):rows=self._get_selected_rows()robj=self.PARAMCLASS()robj.title="FlatField("+(','.join(["%s%03dforrowtry:robj.data=flatfield(self.objects[rowsself.objects[rows[exceptException,msg:importtraceback

  • traceback.print_exc()QMessageBox.critical(self.parent(),APP_NAME_(u"Error:")+"\n%s"returnself.add_object(robj)#------ImageProcessingdefcalibrate(self):classCalibrateParam(DataSet):a=FloatItem('a',default=1.)b=FloatItem('b',default=0.)param=CalibrateParam(_("Linearcalibration"self.compute_11("LinearCal",lambdax,p:psuffix=lambdap:u"z=%s*z+%sdefcompute_threshold(self):classThresholdParam(DataSet):value=FloatItem(_(u"Threshold"))self.compute_11("Threshold",lambdax,p:npThresholdParam(_("Thresholding"suffix=lambdap:u"min=%slsb"defcompute_clip(self):classClipParam(DataSet):value=FloatItem(_(u"Clippingvalue"))self.compute_11("Clip",lambdax,p:np.clipClipParam(_("Clipping")),suffix=lambdap:u"max=%slsb"defcompute_wiener(self):importscipy.signalasspsself.compute_11("WienerFilter",sps.wiener)defcompute_gaussian(self):classGaussianParam(DataSet):sigma=FloatItem(u"σ",default=1.)param=GaussianParam(_("Gaussianfilter"))

  • importscipy.ndimageasspiself.compute_11("GaussianFilter",lambdax,p:spi.gaussian_filtersuffix=lambdap:u"σ=%.3fpixels"defcompute_fft(self):self.compute_11("FFT",np.fft.fft2)defcompute_ifft(self):self.compute_11("iFFT",np.fft.ifft2)#------I/Odefnew_image(self):"""Createanewimage"""imagenew=ImageParamNew(title=_("Createanewimage"rows=self._get_selected_rows()ifrows:data=self.objects[rows[-1]].dataimagenew.width=data.shape[1]imagenew.height=data.shape[0]imagenew.title="%s%d"%(imagenew.title,ifnotimagenew.edit(parent=self.parent()):returnself.number+=1image=ImageParam()image.title=imagenew.titleshape=(imagenew.height,imagenew.width)dtype=imagenew.dtypeifimagenew.type=='zeros':image.data=np.zeros(shape,dtype=dtypeelifimagenew.type=='empty':image.data=np.empty(shape,dtype=dtypeelifimagenew.type=='rand':data=np.random.rand(*shape)fromguiqwtimportioimage.data=io.scale_data_to_dtype(dataself.add_object(image)

  • defopen_image(self):"""Openimagefile"""fromguiqwt.qthelpersimportexec_images_open_dialogforfilename,datainexec_images_open_dialogapp_name=APP_NAMEos.chdir(osp.dirname(filename))image=ImageParam()image.title=filenameimage.data=dataifosp.splitext(filename)[1].lower()==importdicomdcm=dicom.read_file(filename,stop_before_pixelsimage.metadata={}forattr_strindir(dcm):ifattr_str!='GroupLength':image.metadata[attr_str]=self.add_object(image)defsave_image(self):"""Saveselectedimage"""rows=self._get_selected_rows()forrowinrows:obj=self.objects[row]fromguiqwt.qthelpersimportexec_image_save_dialogfilename=exec_image_save_dialog(obj.dataapp_nameiffilename:os.chdir(osp.dirname(filename))

    classDockablePlotWidget(DockableWidget):LOCATION=Qt.RightDockWidgetAreadef__init__(self,parent,plotwidgetclass,toolbarsuper(DockablePlotWidget,self).__init__(parentself.toolbar=toolbarlayout=QVBoxLayout()

  • self.plotwidget=plotwidgetclass()layout.addWidget(self.plotwidget)self.setLayout(layout)self.setup()defget_plot(self):returnself.plotwidget.plotdefsetup(self):title=unicode(self.toolbar.windowTitle())self.plotwidget.add_toolbar(self.toolbar,titleifisinstance(self.plotwidget,ImageWidget):self.plotwidget.register_all_image_toolselse:self.plotwidget.register_all_curve_tools#------DockableWidgetAPIdefvisibility_changed(self,enable):"""DockWidgetvisibilityhaschanged"""DockableWidget.visibility_changed(self,enableself.toolbar.setVisible(enable)

    classDockableTabWidget(QTabWidget,DockableWidgetMixinLOCATION=Qt.LeftDockWidgetAreadef__init__(self,parent):QTabWidget.__init__(self,parent)DockableWidgetMixin.__init__(self,parent)

    try:fromspyderlib.widgets.internalshellimportInternalShellclassDockableConsole(InternalShell,DockableWidgetMixinLOCATION=Qt.BottomDockWidgetAreadef__init__(self,parent,namespace,messageInternalShell.__init__(self,parent=parentmessage=message,

  • multithreaded=TrueDockableWidgetMixin.__init__(self,parentself.setup()defsetup(self):font=QFont("Couriernew")font.setPointSize(10)self.set_font(font)self.set_codecompletion_auto(True)self.set_calltips(True)self.setup_calltips(size=600,font=fontself.setup_completion(size=(300,180),exceptImportError:DockableConsole=None

    classSiftProxy(object):def__init__(self,win):self.win=winself.s=self.win.signalft.objectsself.i=self.win.imageft.objects

    classMainWindow(QMainWindow):def__init__(self):QMainWindow.__init__(self)

    self.setWindowIcon(get_icon('sift.svg'))self.setWindowTitle(APP_NAME)#Welcomemessageinstatusbar:status=self.statusBar()status.showMessage(_("Welcometo%s!")%APP_NAME

    self.signal_toolbar=self.addToolBar(_("SignalProcessingToolbar"self.image_toolbar=self.addToolBar(_("ImageProcessingToolbar"

  • #Signalscurveplot_toolbar=self.addToolBar(_("CurvePlottingToolbar"self.curvewidget=DockablePlotWidget(self,curveplot_toolbarcurveplot=self.curvewidget.get_plot()curveplot.add_item(make.legend("TR"))self.signalft=SignalFT(self,plot=curveplotself.signalft.setup(self.signal_toolbar)#Imagesimagevis_toolbar=self.addToolBar(_("ImageVisualizationToolbar"self.imagewidget=DockablePlotWidget(self,imagevis_toolbarself.imageft=ImageFT(self,self.imagewidgetself.imageft.setup(self.image_toolbar)

    forobjectftin(self.signalft,self.imageftself.connect(objectft,SIGNAL("status_message(QString)"status.showMessage)#Mainwindowwidgetsself.tabwidget=DockableTabWidget(self)self.tabwidget.setMaximumWidth(500)self.tabwidget.addTab(self.signalft,get_icon_("Signals"))self.tabwidget.addTab(self.imageft,get_icon_("Images"))self.add_dockwidget(self.tabwidget,_(u"Mainpanel"#self.setCentralWidget(self.tabwidget)self.curve_dock=self.add_dockwidget(self.title=self.image_dock=self.add_dockwidget(self.title=_("Imagevisualizationpanel"self.tabifyDockWidget(self.curve_dock,selfself.connect(self.tabwidget,SIGNAL('currentChanged(int)'self.tab_index_changed)self.connect(self.signalft,SIGNAL('object_added()'

  • lambda:self.tabwidget.setCurrentIndexself.connect(self.imageft,SIGNAL('object_added()'lambda:self.tabwidget.setCurrentIndex#Filemenuself.quit_action=create_action(self,_("Quit"icon=get_std_icontip=_("Quitapplication"triggered=self.closeself.file_menu=self.menuBar().addMenu(_("File"self.connect(self.file_menu,SIGNAL("aboutToShow()"self.update_file_menu)#Editmenuself.edit_menu=self.menuBar().addMenu(_("&Edit"self.connect(self.edit_menu,SIGNAL("aboutToShow()"self.update_edit_menu)#Operationmenuself.operation_menu=self.menuBar().addMenuself.connect(self.operation_menu,SIGNAL("aboutToShow()"self.update_operation_menu)#Processingmenuself.proc_menu=self.menuBar().addMenu(_("Processing"self.connect(self.proc_menu,SIGNAL("aboutToShow()"self.update_proc_menu)#Viewmenuself.view_menu=view_menu=self.createPopupMenuview_menu.setTitle(_(u"&View"))self.menuBar().addMenu(view_menu)#Helpmenuhelp_menu=self.menuBar().addMenu("?")about_action=create_action(self,_("About..."icon=get_std_icon

  • triggered=self.add_actions(help_menu,(about_action,))#Eventuallyaddaninternalconsole(requires'spyderlib')self.sift_proxy=SiftProxy(self)ifDockableConsoleisNone:self.console=Noneelse:importtime,scipy.signalassps,scipy.ndimagens={'sift':self.sift_proxy,'np':np,'sps':sps,'spi':spi,'os':os,'sys':sys,'osp':osp,msg="Example:sift.s[0]returnssignalobject#0"Modulesimportedatstartup:"\"os,sys,os.pathasosp,time,""numpyasnp,scipy.signalassps,scipy.ndimageasspi"self.console=DockableConsole(self,namespaceself.add_dockwidget(self.console,_(u"Console"self.connect(self.console.interpreter.widget_proxySIGNAL("new_prompt(QString)"lambdatxt:self.refresh_lists#Updateselectiondependentactionsself.update_actions()#Showmainwindowandraisethesignalplotpanelself.show()self.curve_dock.raise_()#------GUIrefresh/setupdefadd_dockwidget(self,child,title):"""AddQDockWidgetandtoggleViewAction"""dockwidget,location=child.create_dockwidgetself.addDockWidget(location,dockwidget)returndockwidgetdefrefresh_lists(self):

  • self.signalft.refresh_list()self.imageft.refresh_list()defupdate_actions(self):self.signalft.selection_changed()self.imageft.selection_changed()is_signal=self.tabwidget.currentWidget()self.signal_toolbar.setVisible(is_signal)self.image_toolbar.setVisible(notis_signaldeftab_index_changed(self,index):dock=(self.curve_dock,self.image_dock)[indexdock.raise_()self.update_actions()

    defupdate_file_menu(self):self.file_menu.clear()objectft=self.tabwidget.currentWidget()actions=objectft.file_actions+[None,selfadd_actions(self.file_menu,actions)

    defupdate_edit_menu(self):self.edit_menu.clear()objectft=self.tabwidget.currentWidget()add_actions(self.edit_menu,objectft.edit_actionsdefupdate_operation_menu(self):self.operation_menu.clear()objectft=self.tabwidget.currentWidget()add_actions(self.operation_menu,objectft.operation_actionsdefupdate_proc_menu(self):self.proc_menu.clear()objectft=self.tabwidget.currentWidget()add_actions(self.proc_menu,objectft.processing_actions#------?

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    defabout(self):QMessageBox.about(self,_("About")+APP_NAME"""%sv%s
    %s

    %sPierreRaybaut
    Copyright©2010CEA

    Python%s,Qt%s,PyQt%s%s%s"""(APP_NAME,VERSION,APP_DESC,_("Developpedby"platform.python_version(),QT_VERSION_STR,PYQT_VERSION_STR,_(defcloseEvent(self,event):ifself.consoleisnotNone:self.console.exit_interpreter()event.accept()

    defrun():fromguidataimportqapplicationapp=qapplication()window=MainWindow()window.show()app.exec_()

    if__name__=='__main__':run()

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

  • MakingexecutableWindowsprograms

    Thepy2exePythonlibraryisanextensiontoPythondistutilsmodulewhichconvertsPythonscriptsintoexecutableWindowsprograms,abletorunwithoutrequiringaPythoninstallation.

    Makingsuchanexecutableprogrammaybeanontrivialtaskwhenthescriptdependenciesincludelibrarieswithdataorextensions,suchasPyQt4orguidataandguiqwt.Thistaskhasbeenconsiderablysimplifiedthankstothehelperfunctionsprovidedbyguidata.disthelpers.

  • ExampleThisexampleisincludedinguiqwtsourcepackage(seethepy2exe_exampledirectory).

    Simpleexamplescriptnamedsimpledialog.pywwhichisbasedonguiqwt(andimplicitelyonguidata):

    fromguiqwt.plotimportImageDialogfromguiqwt.builderimportmake

    classVerySimpleDialog(ImageDialog):defset_data(self,data):plot=self.get_plot()item=make.trimage(data)plot.add_item(item,z=0)plot.set_active_item(item)plot.replot()

    if__name__=="__main__":importnumpyasnpfromguidataimportqapplicationqapplication()dlg=VerySimpleDialog()dlg.set_data(np.random.rand(100,100))dlg.exec_()

    Thesetup.pyscriptmaybewrittenasthefollowing:

    fromdistutils.coreimportsetupimportpy2exe#Patchingdistutilssetupfromguidata.disthelpersimport(remove_build_dist,get_default_dll_excludes,

  • add_modules)

    #Removingoldbuild/distfoldersremove_build_dist()

    #Including/excludingDLLsandPythonmodulesEXCLUDES=get_default_excludes()INCLUDES=[]DLL_EXCLUDES=get_default_dll_excludes()DATA_FILES=create_vs2008_data_files()

    #Configuring/includingPythonmodulesadd_modules(('PyQt4','guidata','guiqwt'),DATA_FILES

    setup(options={"py2exe":{"compressed":2,"optimize""includes":INCLUDES,"excludes""dll_excludes":DLL_EXCLUDES"dist_dir":"dist",},},data_files=DATA_FILES,windows=[{"script":"simpledialog.pyw","dest_base":"simpledialog","version":"1.0.0","company_name":u"CEA","copyright":u"Copyright©2010CEA-PierreRaybaut""name":"Simpledialogbox","description":"Simpledialogbox",},],zipfile=None,)

    MaketheWindowsexecutableprogramwiththefollowingcommand:

  • indexmodules |next |previous |guiqwtv2.2.1documentation »

    pythonsetup.pypy2exe

    ©Copyright2009-2012,CEA-Commissariatàl'EnergieAtomiqueetauxEnergiesAlternatives.

    CreatedusingSphinx1.0.8.

    http://sphinx.pocoo.org/

  • indexmodules |previous |guiqwtv2.2.1documentation »

  • GUIQwtreference

  • guiqwt.pyplotThepyplotmoduleprovidesaninteractiveplottinginterfacesimilartoMatplotlib‘s,i.e.withMATLAB-likesyntax.

    Theguiqwt.pyplotmodulewasdesignedtobeascloseaspossibletothematplotlib.pyplotmodule,sothatonecouldeasilyswitchbetweenthesetwomodulesbysimplychangingtheimportstatement.Basically,ifguiqwtdoessupporttheplottingcommandscalledinyourscript,replacingimportmatplotlib.pyplotbyimportguiqwt.pyplotshouldsuffice,asshowninthefollowingexample:

    Simpleexampleusingmatplotlib:

    importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-10,10)plt.plot(x,x**2,'r+')plt.show()

    Switchingfrommatplotlibtoguiqwtistrivial:

    importguiqwt.pyplotasplt#onlythislinehaschanged!importnumpyasnpx=np.linspace(-10,10)plt.plot(x,x**2,'r+')plt.show()

    Examples

  • [source]

    [source]

    [source]

    >>>importnumpyasnp>>>fromguiqwt.pyplotimport*#uglybutacceptableinaninteractivesession>>>ion()#switchingtointeractivemode>>>x=np.linspace(-5,5,1000)>>>figure(1)>>>subplot(2,1,1)>>>plot(x,np.sin(x),"r+")>>>plot(x,np.cos(x),"g-")>>>errorbar(x,-1+x**2/20+.2*np.random.rand(len(x)),>>>xlabel("Axex")>>>ylabel("Axey")>>>subplot(2,1,2)>>>img=np.fromfunction(lambdax,y:np.sin((x/200.>>>xlabel("pixels")>>>ylabel("pixels")>>>zlabel("intensity")>>>gray()>>>imshow(img)>>>figure("plotyy")>>>plotyy(x,np.sin(x),x,np.cos(x))>>>ylabel("sinus","cosinus")>>>show()

    Reference

    guiqwt.pyplot.interactive(state)Toggleinteractivemode

    guiqwt.pyplot.ion()Turninteractivemodeon

    guiqwt.pyplot.ioff()Turninteractivemodeoff

  • [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    guiqwt.pyplot.figure(N=None)Createanewfigure

    guiqwt.pyplot.gcf()Getcurrentfigure

    guiqwt.pyplot.gca()Getcurrentaxes

    guiqwt.pyplot.show(mainloop=True)ShowallfiguresandenterQteventloopThisshouldbethelastlineofyourscript

    guiqwt.pyplot.subplot(n,m,k)Createasubplotcommand

    Example:importnumpyasnpx=np.linspace(-5,5,1000)figure(1)subplot(2,1,1)plot(x,np.sin(x),“r+”)subplot(2,1,2)plot(x,np.cos(x),“g-”)show()

    guiqwt.pyplot.close(N=None,all=False)Closefigure

    guiqwt.pyplot.title(text)Setcurrentfiguretitle

    guiqwt.pyplot.xlabel(bottom='',top='')Setcurrentx-axislabel

    guiqwt.pyplot.ylabel(left='',right='')Setcurrenty-axislabel

  • [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    [source]

    guiqwt.pyplot.zlabel(label)Setcurrentz-axislabel

    guiqwt.pyplot.yreverse(reverse)Sety-axisdirectionofincreasingvalues

    reverse=False(default)

    y-axisvaluesincreasefrombottomtotop

    reverse=True

    y-axisvaluesincreasefromtoptobottom

    guiqwt.pyplot.grid(act)Togglegridvisibility

    guiqwt.pyplot.legend(pos='TR')Addlegendtocurrentaxes(pos=’TR’,‘TL’,‘BR’,...)

    guiqwt.pyplot.colormap(name)Setcolormaptoname

    guiqwt.pyplot.savefig(fname,format=None,draft=False)Savefigure

    CurrentlysupportsPDFandPNGformatsonly

    guiqwt.pyplot.plot(*args,**kwargs)Plotcurves

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)plot(x,np.sin(x),“r+”)plot(x,np.cos(x),“g-”)show()

  • [source]

    [source]

    [source]

    [source]

    [source]

    guiqwt.pyplot.plotyy(x1,y1,x2,y2)Plotcurveswithtwodifferentyaxes

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)plotyy(x,np.sin(x),x,np.cos(x))ylabel(“sinus”,“cosinus”)show()

    guiqwt.pyplot.semilogx(*args,**kwargs)Plotcurveswithlogarithmicx-axisscale

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)semilogx(x,np.sin(12*x),“g-”)show()

    guiqwt.pyplot.semilogy(*args,**kwargs)Plotcurveswithlogarithmicy-axisscale

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)semilogy(x,np.sin(12*x),“g-”)show()

    guiqwt.pyplot.loglog(*args,**kwargs)Plotcurveswithlogarithmicx-axisandy-axisscales

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)loglog(x,np.sin(12*x),“g-”)show()

    guiqwt.pyplot.errorbar(*args,**kwargs)Plotcurveswitherrorbars

    Example:

  • [source]

    [source]

    [source]

    importnumpyasnpx=np.linspace(-5,5,1000)errorbar(x,-1+x**2/20+.2*np.random.rand(len(x)),x/20)show()

    guiqwt.pyplot.hist(data,bins=None,logscale=None,title=None,color=None)

    Plot1-Dhistogram

    Example:

    fromnumpy.randomimportnormaldata=normal(0,1,(2000,))hist(data)show()

    guiqwt.pyplot.imshow(data,interpolation=None,mask=None)Displaytheimageindatatocurrentaxesinterpolation:‘nearest’,‘linear’(default),‘antialiasing’

    Example:

    importnumpyasnpx=np.linspace(-5,5,1000)img=np.fromfunction(lambdax,y:

    np.sin((x/200.)*(y/200.)**2),(1000,1000))

    gray()imshow(img)show()

    guiqwt.pyplot.pcolor(*args)Createapseudocolorplotofa2-Darray

    Example:

    importnumpyasnpr=np.linspace(1.,16,100)th=np.linspace(0.,np.pi,100)R,TH=np.meshgrid(r,th)X=R*np.cos(TH)Y=R*np.sin(TH)Z=4*TH+Rpcolor(X,Y,Z)show()

  • guiqwt.widgets.fit

    Thefitmoduleprovidesaninteractivecurvefittingwidget/dialogallowing:

    tofitdatamanually(bymovingsliders)orautomatically(withstandardoptimizationalgorithmsprovidedbyscipy).

    Example

    importnumpyasnp

    fromguiqwt.widgets.fitimportFitParam,guifit

    deftest():x=np.linspace(-10,10,1000)y=np.cos(1.5*x)+np.random.rand(x.shape[0])*.2deffit(x,params):a,b=paramsreturnnp.cos(b*x)+aa=FitParam("Offset",1.,0.,2.)b=FitParam("Frequency",2.,1.,10.,logscaleparams=[a,b]values=guifit(x,y,fit,params,xlabel="Time(s)"printvaluesprint[param.valueforparaminparams]

    if__name__=="__main__":test()

  • [source]

    [source]

    Reference

    guiqwt.widgets.fit.guifit(x,y,fitfunc,fitparams,fitargs=None,fitkwargs=None,wintitle=None,title=None,xlabel=None,ylabel=None,param_cols=1,auto_fit=True,winsize=None,winpos=None)

    GUI-basedcurvefittingtool

    classguiqwt.widgets.fit.FitDialog(wintitle=None,icon='guiqwt.svg',edit=True,toolbar=False,options=None,parent=None,panels=None,param_cols=1,legend_anchor='TR',auto_fit=False)

    classRenderFlagsQWidget.RenderFlags(QWidget.RenderFlags)QWidget.RenderFlags(int)QWidget.RenderFlags()

    FitDialog.accept()

  • QDialog.accept()

    FitDialog.acceptDrops()QWidget.acceptDrops()->bool

    FitDialog.acceptedQDialog.accepted[][signal]

    FitDialog.actions()QWidget.actions()->list-of-QAction

    FitDialog.activateWindow()QWidget.activateWindow()

    FitDialog.activate_default_tool()Activatedefaulttool

    FitDialog.addAction()QWidget.addAction(QAction)

    FitDialog.addActions()QWidget.addActions(list-of-QAction)

    FitDialog.add_panel(panel)Registerapaneltotheplotmanager

    Plotmanager’sregistrationsequenceisthefollowing:

    1. addplots2. addpanels3. addtools

    FitDialog.add_plot(plot,plot_id=)

  • Registeraplottotheplotmanager:

    plot:guiqwt.curve.CurvePlotorguiqwt.image.ImagePlotobjectplot_id(defaultidistheplotobject’sid:id(plot)):uniqueIDidentifyingtheplot(anyPythonobject),thisIDwillbeaskedbythemanagertoaccessthisplotlater.

    Plotmanager’sregistrationsequenceisthefollowing:

    1. addplots2. addpanels3. addtools

    FitDialog.add_separator_tool(toolbar_id=None)Registeraseparatortooltotheplotmanager:theseparatortoolisjustatoolwhichinsertaseparatorintheplotcontextmenu

    FitDialog.add_tool(ToolKlass,*args,**kwargs)Registeratooltothemanager

    ToolKlass:tool’sclass(guiqwtbuiltintoolsaredefinedinmoduleguiqwt.tools)*args:argumentssenttothetool’sclass**kwargs:keywordargumentssenttothetool’sclass

    Plotmanager’sregistrationsequenceisthefollowing:

    1. addplots2. addpanels3. addtools

    FitDialog.add_toolbar(toolbar,toolbar_id='default')

  • Addtoolbartotheplotmanager

    toolbar:aQToolBarobjecttoolbar_id:toolbar’sid(defaultidisstring“default”)

    FitDialog.adjustSize()QWidget.adjustSize()

    FitDialog.autoFillBackground()QWidget.autoFillBackground()->bool

    FitDialog.backgroundRole()QWidget.backgroundRole()->QPalette.ColorRole

    FitDialog.baseSize()QWidget.baseSize()->QSize

    FitDialog.blockSignals()QObject.blockSignals(bool)->bool

    FitDialog.childAt()QWidget.childAt(QPoint)->QWidgetQWidget.childAt(int,int)->QWidget

    FitDialog.children()QObject.children()->list-of-QObject

    FitDialog.childrenRect()QWidget.childrenRect()->QRect

    FitDialog.childrenRegion()QWidget.childrenRegion()->QRegion

    FitDialog.clearFocus()

  • QWidget.clearFocus()

    FitDialog.clearMask()QWidget.clearMask()

    FitDialog.close()QWidget.close()->bool

    FitDialog.closeEvent()QDialog.closeEvent(QCloseEvent)

    FitDialog.colorCount()QPaintDevice.colorCount()->int

    FitDialog.configure_panels()Callalltheregistredpanels‘configure_panel’methodstofinalizetheobjectconstruction(thisallowstousetoolsregisteredtothesameplotmanagerasthepanelitselfwithbreakingtheregistrationsequence:“addplots,thenpanels,thentools”)

    FitDialog.connect()QObject.connect(QObject,SIGNAL(),QObject,SLOT(),Qt.ConnectionType=Qt.AutoConnection)->boolQObject.connect(QObject,SIGNAL(),callable,Qt.ConnectionType=Qt.AutoConnection)->boolQObject.connect(QObject,SIGNAL(),SLOT(),Qt.ConnectionType=Qt.AutoConnection)->bool

    FitDialog.contentsMargins()QWidget.contentsMargins()->QMargins

    FitDialog.contentsRect()

  • QWidget.contentsRect()->QRect

    FitDialog.contextMenuEvent()QDialog.contextMenuEvent(QContextMenuEvent)

    FitDialog.contextMenuPolicy()QWidget.contextMenuPolicy()->Qt.ContextMenuPolicy

    FitDialog.cursor()QWidget.cursor()->QCursor

    FitDialog.customContextMenuRequestedQWidget.customContextMenuRequested[QPoint][signal]

    FitDialog.deleteLater()QObject.deleteLater()

    FitDialog.depth()QPaintDevice.depth()->int

    FitDialog.destroyedQObject.destroyed[QObject][signal]QObject.destroyed[][signal]

    FitDialog.devType()QWidget.devType()->int

    FitDialog.disconnect()QObject.disconnect(QObject,SIGNAL(),QObject,SLOT())->boolQObject.disconnect(QObject,SIGNAL(),callable)->bool

    FitDialog.done()QDialog.done(int)

  • FitDialog.dumpObjectInfo()QObject.dumpObjectInfo()

    FitDialog.dumpObjectTree()QObject.dumpObjectTree()

    FitDialog.dynamicPropertyNames()QObject.dynamicPropertyNames()->list-of-QByteArray

    FitDialog.effectiveWinId()QWidget.effectiveWinId()->sip.voidptr

    FitDialog.emit()QObject.emit(SIGNAL(),...)

    FitDialog.ensurePolished()QWidget.ensurePolished()

    FitDialog.eventFilter()QDialog.eventFilter(QObject,QEvent)->bool

    FitDialog.exec_()QDialog.exec_()->int

    FitDialog.extension()QDialog.extension()->QWidget

    FitDialog.find()QWidget.find(sip.voidptr)->QWidget

    FitDialog.findChild()QObject.findChild(type,QStringname=QString())->QObjectQObject.findChild(tuple,QStringname=QString())->QObject

  • FitDialog.findChildren()QObject.findChildren(type,QStringname=QString())->list-of-QObjectQObject.findChildren(tuple,QStringname=QString())->list-of-QObjectQObject.findChildren(type,QRegExp)->list-of-QObjectQObject.findChildren(tuple,QRegExp)->list-of-QObject

    FitDialog.finishedQDialog.finished[int][signal]

    FitDialog.focusPolicy()QWidget.focusPolicy()->Qt.FocusPolicy

    FitDialog.focusProxy()QWidget.focusProxy()->QWidget

    FitDialog.focusWidget()QWidget.focusWidget()->QWidget

    FitDialog.font()QWidget.font()->QFont

    FitDialog.fontInfo()QWidget.fontInfo()->QFontInfo

    FitDialog.fontMetrics()QWidget.fontMetrics()->QFontMetrics

    FitDialog.foregroundRole()QWidget.foregroundRole()->QPalette.ColorRole

    FitDialog.frameGeometry()QWidget.frameGeometry()->QRect

  • FitDialog.frameSize()QWidget.frameSize()->QSize

    FitDialog.geometry()QWidget.geometry()->QRect

    FitDialog.getContentsMargins()QWidget.getContentsMargins()->(int,int,int,int)

    FitDialog.get_active_plot()Returntheactiveplot

    Theactiveplotistheplotwhosecanvashasthefocusotherwiseit’sthe“default”plot

    FitDialog.get_active_tool()Returnactivetool

    FitDialog.get_context_menu(plot=None)Returnwidgetcontextmenu–builtusingactivetools

    FitDialog.get_contrast_panel()Conveniencefunctiontogetthecontrastadjustmentpanel

    ReturnNoneifthecontrastadjustmentpanelhasnotbeenaddedtothismanager

    FitDialog.get_default_plot()Returndefaultplot

    Thedefaultplotistheplotonwhichtoolsandpanelswillact.

    FitDialog.get_default_tool()

  • Getdefaulttool

    FitDialog.get_default_toolbar()Returndefaulttoolbar

    FitDialog.get_fitfunc_arguments()Returnfitargsandfitkwargs

    FitDialog.get_itemlist_panel()Conveniencefunctiontogettheitemlistpanel

    ReturnNoneiftheitemlistpanelhasnotbeenaddedtothismanager

    FitDialog.get_main()Returnthemain(parent)widget

    Notethatforpy:class:guiqwt.plot.CurveWidgetorguiqwt.plot.ImageWidgetobjects,thismethodwillreturnthewidgetitselfbecausetheplotmanagerisintegratedtoit.

    FitDialog.get_panel(panel_id)ReturnpanelfromitsIDPanelIDsarelistedinmoduleguiqwt.panels

    FitDialog.get_plot(plot_id=)

    Returnplotassociatedtoplot_id(ifmethodiscalledwithoutspecifyingtheplot_idparameter,returnthedefaultplot)

    FitDialog.get_plots()Returnallregisteredplots

  • FitDialog.get_tool(ToolKlass)Returntoolinstancefromitsclass

    FitDialog.get_toolbar(toolbar_id='default')ReturntoolbarfromitsID

    toolbar_id:toolbar’sid(defaultidisstring“default”)

    FitDialog.get_values()Conveniencemethodtogetfitparametervalues

    FitDialog.get_xcs_panel()ConveniencefunctiontogettheX-axiscrosssectionpanel

    ReturnNoneiftheX-axiscrosssectionpanelhasnotbeenaddedtothismanager

    FitDialog.get_ycs_panel()ConveniencefunctiontogettheY-axiscrosssectionpanel

    ReturnNoneiftheY-axiscrosssectionpanelhasnotbeenaddedtothismanager

    FitDialog.grabGesture()QWidget.grabGesture(Qt.GestureType,Qt.GestureFlagsflags=Qt.GestureFlags(0))

    FitDialog.grabKeyboard()QWidget.grabKeyboard()

    FitDialog.grabMouse()QWidget.grabMouse()QWidget.grabMouse(QCursor)

  • FitDialog.grabShortcut()QWidget.grabShortcut(QKeySequence,Qt.ShortcutContextcontext=Qt.WindowShortcut)->int

    FitDialog.graphicsEffect()QWidget.graphicsEffect()->QGraphicsEffect

    FitDialog.graphicsProxyWidget()QWidget.graphicsProxyWidget()->QGraphicsProxyWidget

    FitDialog.hasFocus()QWidget.hasFocus()->bool

    FitDialog.hasMouseTracking()QWidget.hasMouseTracking()->bool

    FitDialog.height()QWidget.height()->int

    FitDialog.heightForWidth()QWidget.heightForWidth(int)->int

    FitDialog.heightMM()QPaintDevice.heightMM()->int

    FitDialog.hide()QWidget.hide()

    FitDialog.inherits()QObject.inherits(str)->bool

    FitDialog.inputContext()QWidget.inputContext()->QInputContext

  • FitDialog.inputMethodHints()QWidget.inputMethodHints()->Qt.InputMethodHints

    FitDialog.inputMethodQuery()QWidget.inputMethodQuery(Qt.InputMethodQuery)->QVariant

    FitDialog.insertAction()QWidget.insertAction(QAction,QAction)

    FitDialog.insertActions()QWidget.insertActions(QAction,list-of-QAction)

    FitDialog.installEventFilter()QObject.installEventFilter(QObject)

    FitDialog.isActiveWindow()QWidget.isActiveWindow()->bool

    FitDialog.isAncestorOf()QWidget.isAncestorOf(QWidget)->bool

    FitDialog.isEnabled()QWidget.isEnabled()->bool

    FitDialog.isEnabledTo()QWidget.isEnabledTo(QWidget)->bool

    FitDialog.isEnabledToTLW()QWidget.isEnabledToTLW()->bool

    FitDialog.isFullScreen()QWidget.isFullScreen()->bool

    FitDialog.isHidden()

  • QWidget.isHidden()->bool

    FitDialog.isLeftToRight()QWidget.isLeftToRight()->bool

    FitDialog.isMaximized()QWidget.isMaximized()->bool

    FitDialog.isMinimized()QWidget.isMinimized()->bool

    FitDialog.isModal()QWidget.isModal()->bool

    FitDialog.isRightToLeft()QWidget.isRightToLeft()->bool

    FitDialog.isSizeGripEnabled()QDialog.isSizeGripEnabled()->bool

    FitDialog.isTopLevel()QWidget.isTopLevel()->bool

    FitDialog.isVisible()QWidget.isVisible()->bool

    FitDialog.isVisibleTo()QWidget.isVisibleTo(QWidget)->bool

    FitDialog.isWidgetType()QObject.isWidgetType()->bool

    FitDialog.isWindow()

  • QWidget.isWindow()->bool

    FitDialog.isWindowModified()QWidget.isWindowModified()->bool

    FitDialog.keyPressEvent()QDialog.keyPressEvent(QKeyEvent)

    FitDialog.keyboardGrabber()QWidget.keyboardGrabber()->QWidget

    FitDialog.killTimer()QObject.killTimer(int)

    FitDialog.layout()QWidget.layout()->QLayout

    FitDialog.layoutDirection()QWidget.layoutDirection()->Qt.LayoutDirection

    FitDialog.locale()QWidget.locale()->QLocale

    FitDialog.logicalDpiX()QPaintDevice.logicalDpiX()->int

    FitDialog.logicalDpiY()QPaintDevice.logicalDpiY()->int

    FitDialog.lower()QWidget.lower()

    FitDialog.mapFrom()QWidget.mapFrom(QWidget,QPoint)->QPoint

  • FitDialog.mapFromGlobal()QWidget.mapFromGlobal(QPoint)->QPoint

    FitDialog.mapFromParent()QWidget.mapFromParent(QPoint)->QPoint

    FitDialog.mapTo()QWidget.mapTo(QWidget,QPoint)->QPoint

    FitDialog.mapToGlobal()QWidget.mapToGlobal(QPoint)->QPoint

    FitDialog.mapToParent()QWidget.mapToParent(QPoint)->QPoint

    FitDialog.mask()QWidget.mask()->QRegion

    FitDialog.maximumHeight()QWidget.maximumHeight()->int

    FitDialog.maximumSize()QWidget.maximumSize()->QSize

    FitDialog.maximumWidth()QWidget.maximumWidth()->int

    FitDialog.metaObject()QObject.metaObject()->QMetaObject

    FitDialog.minimumHeight()QWidget.minimumHeight()->int

    FitDialog.minimumSize()

  • QWidget.minimumSize()->QSize

    FitDialog.minimumSizeHint()QDialog.minimumSizeHint()->QSize

    FitDialog.minimumWidth()QWidget.minimumWidth()->int

    FitDialog.mouseGrabber()QWidget.mouseGrabber()->QWidget

    FitDialog.move()QWidget.move(QPoint)QWidget.move(int,int)

    FitDialog.moveToThread()QObject.moveToThread(QThread)

    FitDialog.nativeParentWidget()QWidget.nativeParentWidget()->QWidget

    FitDialog.nextInFocusChain()QWidget.nextInFocusChain()->QWidget

    FitDialog.normalGeometry()QWidget.normalGeometry()->QRect

    FitDialog.numColors()QPaintDevice.numColors()->int

    FitDialog.objectName()QObject.objectName()->QString

    FitDialog.open()

  • QDialog.open()

    FitDialog.orientation()QDialog.orientation()->Qt.Orientation

    FitDialog.overrideWindowFlags()QWidget.overrideWindowFlags(Qt.WindowFlags)

    FitDialog.overrideWindowState()QWidget.overrideWindowState(Qt.WindowStates)

    FitDialog.paintEngine()QWidget.paintEngine()->QPaintEngine

    FitDialog.paintingActive()QPaintDevice.paintingActive()->bool

    FitDialog.palette()QWidget.palette()->QPalette

    FitDialog.parent()QObject.parent()->QObject

    FitDialog.parentWidget()QWidget.parentWidget()->QWidget

    FitDialog.physicalDpiX()QPaintDevice.physicalDpiX()->int

    FitDialog.physicalDpiY()QPaintDevice.physicalDpiY()->int

    FitDialog.pos()QWidget.pos()->QPoint

  • FitDialog.previousInFocusChain()QWidget.previousInFocusChain()->QWidget

    FitDialog.property()QObject.property(str)->QVariant

    FitDialog.pyqtConfigure()QObject.pyqtConfigure(...)

    EachkeywordargumentiseitherthenameofaQtpropertyoraQtsignal.Forpropertiesthepropertyissettothegivenvaluewhichshouldbeofanappropriatetype.Forsignalsthesignalisconnectedtothegivenvaluewhichshouldbeacallable.

    FitDialog.raise_()QWidget.raise_()

    FitDialog.rect()QWidget.rect()->QRect

    FitDialog.refresh(slider_value=None)RefreshFitTooldialogbox

    FitDialog.register_all_curve_tools()Registerstandard,curve-relatedandothertools

    Seealso

    methods

    guiqwt.plot.PlotManager.add_tool()guiqwt.plot.PlotManager.register_standard_tools()guiqwt.plot.PlotManager.register_other_tools()guiqwt.plot.PlotManager.register_curve_tools()

  • guiqwt.plot.PlotManager.register_image_tools()guiqwt.plot.PlotManager.register_all_image_tools()

    FitDialog.register_all_image_tools()Registerstandard,image-relatedandothertools

    Seealso

    methods

    guiqwt.plot.PlotManager.add_tool()guiqwt.plot.PlotManager.register_standard_tools()guiqwt.plot.PlotManager.register_other_tools()guiqwt.plot.PlotManager.register_curve_tools()guiqwt.plot.PlotManager.register_image_tools()guiqwt.plot.PlotManager.register_all_curve_tools()

    FitDialog.register_curve_tools()Registeronlycurve-relatedtools

    Seealso

    methods

    guiqwt.plot.PlotManager.add_tool()guiqwt.plot.PlotManager.register_standard_tools()guiqwt.plot.PlotManager.register_other_tools()guiqwt.plot.PlotManager.register_image_tools()

    FitDialog.register_image_tools()Registeronlyimage-relatedtools

    Seealso

  • methods

    guiqwt.plot.PlotManager.add_tool()guiqwt.plot.PlotManager.register_standard_tools()guiqwt.plot.PlotManager.register_other_tools()guiqwt.plot.PlotManager.register_curve_tools()

    FitDialog.register_other_tools()Registerothercommontools

    Seealso

    methods

    guiqwt.plot.PlotManager.add_tool()guiqwt.plot.PlotManager.register_standard_tools()guiqwt.plot.PlotManager.register_curve_tools()guiqwt.plot.PlotManager.register_image_tools()

    FitDialog.register_standard_tools()Registeringbasictoolsforstandardplotdialog–>topofthecontext-menu

    FitDialog.register_tools()Registertheplottingdialogboxtools:thebaseimplementationprovidesstandard,curve-relatedandothertools-i.e.callingthismethodisexactlythesameascallingguiqwt.plot.CurveDialog.register_all_curve_tools()

    Thismethodmaybeoverridentoprovideafullycustomizedsetoftools

    FitDialog.reject()

  • QDialog.reject()

    FitDialog.rejectedQDialog.rejected[][signal]

    FitDialog.releaseKeyboard()QWidget.releaseKeyboard()

    FitDialog.releaseMouse()QWidget.releaseMouse()

    FitDialog.releaseShortcut()QWidget.releaseShortcut(int)

    FitDialog.removeAction()QWidget.removeAction(QAction)

    FitDialog.removeEventFilter()QObject.removeEventFilter(QObject)

    FitDialog.render()QWidget.render(QPaintDevice,QPointtargetOffset=QPoint(),QRegionsourceRegion=QRegion(),QWidget.RenderFlagsflags=QWidget.DrawWindowBackground|QWidget.DrawChildren)QWidget.render(QPainter,QPointtargetOffset=QPoint(),QRegionsourceRegion=QRegion(),QWidget.RenderFlagsflags=QWidget.DrawWindowBackground|QWidget.DrawChildren)

    FitDialog.repaint()QWidget.repaint()QWidget.repaint(int,int,int,int)QWidget.repaint(QRect)QWidget.repaint(QRegion)

    FitDialog.resize()

  • QWidget.resize(QSize)QWidget.resize(int,int)

    FitDialog.resizeEvent()QDialog.resizeEvent(QResizeEvent)

    FitDialog.restoreGeometry()QWidget.restoreGeometry(QByteArray)->bool

    FitDialog.result()QDialog.result()->int

    FitDialog.saveGeometry()QWidget.save