3939 figureoptions = None
4040
4141from .qt4_compat import QtCore , QtGui , _getSaveFileName , __version__
42+ from matplotlib .backends .qt4_editor .formsubplottool import UiSubplotTool
4243
4344backend_version = __version__
4445
@@ -558,6 +559,7 @@ class NavigationToolbar2QT(NavigationToolbar2, QtGui.QToolBar):
558559 def __init__ (self , canvas , parent , coordinates = True ):
559560 """ coordinates: should we show the coordinates on the right? """
560561 self .canvas = canvas
562+ self .parent = parent
561563 self .coordinates = coordinates
562564 self ._actions = {}
563565 """A mapping of toolitem method names to their QActions"""
@@ -628,9 +630,8 @@ def edit_parameters(self):
628630 titles .append (fmt % dict (title = title ,
629631 ylabel = ylabel ,
630632 axes_repr = repr (axes )))
631- item , ok = QtGui .QInputDialog .getItem (self , 'Customize' ,
632- 'Select axes:' , titles ,
633- 0 , False )
633+ item , ok = QtGui .QInputDialog .getItem (
634+ self .parent , 'Customize' , 'Select axes:' , titles , 0 , False )
634635 if ok :
635636 axes = allaxes [titles .index (six .text_type (item ))]
636637 else :
@@ -676,20 +677,11 @@ def draw_rubberband(self, event, x0, y0, x1, y1):
676677 self .canvas .drawRectangle (rect )
677678
678679 def configure_subplots (self ):
679- self .adj_window = QtGui .QMainWindow ()
680- win = self .adj_window
681-
682- win .setWindowTitle ("Subplot Configuration Tool" )
683680 image = os .path .join (matplotlib .rcParams ['datapath' ],
684681 'images' , 'matplotlib.png' )
685- win .setWindowIcon (QtGui .QIcon (image ))
686-
687- tool = SubplotToolQt (self .canvas .figure , win )
688- win .setCentralWidget (tool )
689- win .setSizePolicy (QtGui .QSizePolicy .Preferred ,
690- QtGui .QSizePolicy .Preferred )
691-
692- win .show ()
682+ dia = SubplotToolQt (self .canvas .figure , self .parent )
683+ dia .setWindowIcon (QtGui .QIcon (image ))
684+ dia .exec_ ()
693685
694686 def _get_canvas (self , fig ):
695687 return FigureCanvasQT (fig )
@@ -712,8 +704,9 @@ def save_figure(self, *args):
712704 selectedFilter = filter
713705 filters .append (filter )
714706 filters = ';;' .join (filters )
715- fname = _getSaveFileName (self , "Choose a filename to save to" ,
716- start , filters , selectedFilter )
707+
708+ fname = _getSaveFileName (self .parent , "Choose a filename to save to" ,
709+ start , filters , selectedFilter )
717710 if fname :
718711 if startpath == '' :
719712 # explicitly missing key or empty str signals to use cwd
@@ -730,132 +723,98 @@ def save_figure(self, *args):
730723 QtGui .QMessageBox .Ok , QtGui .QMessageBox .NoButton )
731724
732725
733- class SubplotToolQt (SubplotTool , QtGui . QWidget ):
726+ class SubplotToolQt (SubplotTool , UiSubplotTool ):
734727 def __init__ (self , targetfig , parent ):
735- QtGui . QWidget .__init__ (self , None )
728+ UiSubplotTool .__init__ (self , None )
736729
737730 self .targetfig = targetfig
738731 self .parent = parent
739-
740- self .sliderleft = QtGui .QSlider (QtCore .Qt .Horizontal )
741- self .sliderbottom = QtGui .QSlider (QtCore .Qt .Vertical )
742- self .sliderright = QtGui .QSlider (QtCore .Qt .Horizontal )
743- self .slidertop = QtGui .QSlider (QtCore .Qt .Vertical )
744- self .sliderwspace = QtGui .QSlider (QtCore .Qt .Horizontal )
745- self .sliderhspace = QtGui .QSlider (QtCore .Qt .Vertical )
732+ self .donebutton .clicked .connect (self .close )
733+ self .resetbutton .clicked .connect (self .reset )
734+ self .tightlayout .clicked .connect (self .functight )
746735
747736 # constraints
748737 self .sliderleft .valueChanged .connect (self .sliderright .setMinimum )
749738 self .sliderright .valueChanged .connect (self .sliderleft .setMaximum )
750739 self .sliderbottom .valueChanged .connect (self .slidertop .setMinimum )
751740 self .slidertop .valueChanged .connect (self .sliderbottom .setMaximum )
752741
753- sliders = (self .sliderleft , self .sliderbottom , self .sliderright ,
754- self .slidertop , self .sliderwspace , self .sliderhspace ,)
755- adjustments = ('left:' , 'bottom:' , 'right:' ,
756- 'top:' , 'wspace:' , 'hspace:' )
757-
758- for slider , adjustment in zip (sliders , adjustments ):
742+ self .defaults = {}
743+ for attr in ('left' , 'bottom' , 'right' , 'top' , 'wspace' , 'hspace' ,):
744+ self .defaults [attr ] = getattr (self .targetfig .subplotpars , attr )
745+ slider = getattr (self , 'slider' + attr )
759746 slider .setMinimum (0 )
760747 slider .setMaximum (1000 )
761748 slider .setSingleStep (5 )
749+ slider .valueChanged .connect (getattr (self , 'func' + attr ))
750+
751+ self ._setSliderPositions ()
762752
763- layout = QtGui .QGridLayout ()
764-
765- leftlabel = QtGui .QLabel ('left' )
766- layout .addWidget (leftlabel , 2 , 0 )
767- layout .addWidget (self .sliderleft , 2 , 1 )
768-
769- toplabel = QtGui .QLabel ('top' )
770- layout .addWidget (toplabel , 0 , 2 )
771- layout .addWidget (self .slidertop , 1 , 2 )
772- layout .setAlignment (self .slidertop , QtCore .Qt .AlignHCenter )
773-
774- bottomlabel = QtGui .QLabel ('bottom' ) # this might not ever be used
775- layout .addWidget (bottomlabel , 4 , 2 )
776- layout .addWidget (self .sliderbottom , 3 , 2 )
777- layout .setAlignment (self .sliderbottom , QtCore .Qt .AlignHCenter )
778-
779- rightlabel = QtGui .QLabel ('right' )
780- layout .addWidget (rightlabel , 2 , 4 )
781- layout .addWidget (self .sliderright , 2 , 3 )
782-
783- hspacelabel = QtGui .QLabel ('hspace' )
784- layout .addWidget (hspacelabel , 0 , 6 )
785- layout .setAlignment (hspacelabel , QtCore .Qt .AlignHCenter )
786- layout .addWidget (self .sliderhspace , 1 , 6 )
787- layout .setAlignment (self .sliderhspace , QtCore .Qt .AlignHCenter )
788-
789- wspacelabel = QtGui .QLabel ('wspace' )
790- layout .addWidget (wspacelabel , 4 , 6 )
791- layout .setAlignment (wspacelabel , QtCore .Qt .AlignHCenter )
792- layout .addWidget (self .sliderwspace , 3 , 6 )
793- layout .setAlignment (self .sliderwspace , QtCore .Qt .AlignBottom )
794-
795- layout .setRowStretch (1 , 1 )
796- layout .setRowStretch (3 , 1 )
797- layout .setColumnStretch (1 , 1 )
798- layout .setColumnStretch (3 , 1 )
799- layout .setColumnStretch (6 , 1 )
800-
801- self .setLayout (layout )
802-
803- self .sliderleft .setSliderPosition (int (targetfig .subplotpars .left * 1000 ))
804- self .sliderbottom .setSliderPosition (
805- int (targetfig .subplotpars .bottom * 1000 ))
806- self .sliderright .setSliderPosition (
807- int (targetfig .subplotpars .right * 1000 ))
808- self .slidertop .setSliderPosition (int (targetfig .subplotpars .top * 1000 ))
809- self .sliderwspace .setSliderPosition (
810- int (targetfig .subplotpars .wspace * 1000 ))
811- self .sliderhspace .setSliderPosition (
812- int (targetfig .subplotpars .hspace * 1000 ))
813-
814- self .sliderleft .valueChanged .connect (self .funcleft )
815- self .sliderbottom .valueChanged .connect (self .funcbottom )
816- self .sliderright .valueChanged .connect (self .funcright )
817- self .slidertop .valueChanged .connect (self .functop )
818- self .sliderwspace .valueChanged .connect (self .funcwspace )
819- self .sliderhspace .valueChanged .connect (self .funchspace )
753+ def _setSliderPositions (self ):
754+ for attr in ('left' , 'bottom' , 'right' , 'top' , 'wspace' , 'hspace' ,):
755+ slider = getattr (self , 'slider' + attr )
756+ slider .setSliderPosition (int (self .defaults [attr ] * 1000 ))
820757
821758 def funcleft (self , val ):
822759 if val == self .sliderright .value ():
823760 val -= 1
824- self .targetfig .subplots_adjust (left = val / 1000. )
761+ val /= 1000.
762+ self .targetfig .subplots_adjust (left = val )
763+ self .leftvalue .setText ("%.2f" % val )
825764 if self .drawon :
826765 self .targetfig .canvas .draw ()
827766
828767 def funcright (self , val ):
829768 if val == self .sliderleft .value ():
830769 val += 1
831- self .targetfig .subplots_adjust (right = val / 1000. )
770+ val /= 1000.
771+ self .targetfig .subplots_adjust (right = val )
772+ self .rightvalue .setText ("%.2f" % val )
832773 if self .drawon :
833774 self .targetfig .canvas .draw ()
834775
835776 def funcbottom (self , val ):
836777 if val == self .slidertop .value ():
837778 val -= 1
838- self .targetfig .subplots_adjust (bottom = val / 1000. )
779+ val /= 1000.
780+ self .targetfig .subplots_adjust (bottom = val )
781+ self .bottomvalue .setText ("%.2f" % val )
839782 if self .drawon :
840783 self .targetfig .canvas .draw ()
841784
842785 def functop (self , val ):
843786 if val == self .sliderbottom .value ():
844787 val += 1
845- self .targetfig .subplots_adjust (top = val / 1000. )
788+ val /= 1000.
789+ self .targetfig .subplots_adjust (top = val )
790+ self .topvalue .setText ("%.2f" % val )
846791 if self .drawon :
847792 self .targetfig .canvas .draw ()
848793
849794 def funcwspace (self , val ):
850- self .targetfig .subplots_adjust (wspace = val / 1000. )
795+ val /= 1000.
796+ self .targetfig .subplots_adjust (wspace = val )
797+ self .wspacevalue .setText ("%.2f" % val )
851798 if self .drawon :
852799 self .targetfig .canvas .draw ()
853800
854801 def funchspace (self , val ):
855- self .targetfig .subplots_adjust (hspace = val / 1000. )
802+ val /= 1000.
803+ self .targetfig .subplots_adjust (hspace = val )
804+ self .hspacevalue .setText ("%.2f" % val )
856805 if self .drawon :
857806 self .targetfig .canvas .draw ()
858807
808+ def functight (self ):
809+ self .targetfig .tight_layout ()
810+ self ._setSliderPositions ()
811+ self .targetfig .canvas .draw ()
812+
813+ def reset (self ):
814+ self .targetfig .subplots_adjust (** self .defaults )
815+ self ._setSliderPositions ()
816+ self .targetfig .canvas .draw ()
817+
859818
860819def error_msg_qt (msg , parent = None ):
861820 if not is_string_like (msg ):
0 commit comments