39
39
figureoptions = None
40
40
41
41
from .qt4_compat import QtCore , QtGui , _getSaveFileName , __version__
42
+ from matplotlib .backends .qt4_editor .formsubplottool import UiSubplotTool
42
43
43
44
backend_version = __version__
44
45
@@ -558,6 +559,7 @@ class NavigationToolbar2QT(NavigationToolbar2, QtGui.QToolBar):
558
559
def __init__ (self , canvas , parent , coordinates = True ):
559
560
""" coordinates: should we show the coordinates on the right? """
560
561
self .canvas = canvas
562
+ self .parent = parent
561
563
self .coordinates = coordinates
562
564
self ._actions = {}
563
565
"""A mapping of toolitem method names to their QActions"""
@@ -628,9 +630,8 @@ def edit_parameters(self):
628
630
titles .append (fmt % dict (title = title ,
629
631
ylabel = ylabel ,
630
632
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 )
634
635
if ok :
635
636
axes = allaxes [titles .index (six .text_type (item ))]
636
637
else :
@@ -676,20 +677,11 @@ def draw_rubberband(self, event, x0, y0, x1, y1):
676
677
self .canvas .drawRectangle (rect )
677
678
678
679
def configure_subplots (self ):
679
- self .adj_window = QtGui .QMainWindow ()
680
- win = self .adj_window
681
-
682
- win .setWindowTitle ("Subplot Configuration Tool" )
683
680
image = os .path .join (matplotlib .rcParams ['datapath' ],
684
681
'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_ ()
693
685
694
686
def _get_canvas (self , fig ):
695
687
return FigureCanvasQT (fig )
@@ -712,8 +704,9 @@ def save_figure(self, *args):
712
704
selectedFilter = filter
713
705
filters .append (filter )
714
706
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 )
717
710
if fname :
718
711
if startpath == '' :
719
712
# explicitly missing key or empty str signals to use cwd
@@ -730,132 +723,98 @@ def save_figure(self, *args):
730
723
QtGui .QMessageBox .Ok , QtGui .QMessageBox .NoButton )
731
724
732
725
733
- class SubplotToolQt (SubplotTool , QtGui . QWidget ):
726
+ class SubplotToolQt (SubplotTool , UiSubplotTool ):
734
727
def __init__ (self , targetfig , parent ):
735
- QtGui . QWidget .__init__ (self , None )
728
+ UiSubplotTool .__init__ (self , None )
736
729
737
730
self .targetfig = targetfig
738
731
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 )
746
735
747
736
# constraints
748
737
self .sliderleft .valueChanged .connect (self .sliderright .setMinimum )
749
738
self .sliderright .valueChanged .connect (self .sliderleft .setMaximum )
750
739
self .sliderbottom .valueChanged .connect (self .slidertop .setMinimum )
751
740
self .slidertop .valueChanged .connect (self .sliderbottom .setMaximum )
752
741
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 )
759
746
slider .setMinimum (0 )
760
747
slider .setMaximum (1000 )
761
748
slider .setSingleStep (5 )
749
+ slider .valueChanged .connect (getattr (self , 'func' + attr ))
750
+
751
+ self ._setSliderPositions ()
762
752
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 ))
820
757
821
758
def funcleft (self , val ):
822
759
if val == self .sliderright .value ():
823
760
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 )
825
764
if self .drawon :
826
765
self .targetfig .canvas .draw ()
827
766
828
767
def funcright (self , val ):
829
768
if val == self .sliderleft .value ():
830
769
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 )
832
773
if self .drawon :
833
774
self .targetfig .canvas .draw ()
834
775
835
776
def funcbottom (self , val ):
836
777
if val == self .slidertop .value ():
837
778
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 )
839
782
if self .drawon :
840
783
self .targetfig .canvas .draw ()
841
784
842
785
def functop (self , val ):
843
786
if val == self .sliderbottom .value ():
844
787
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 )
846
791
if self .drawon :
847
792
self .targetfig .canvas .draw ()
848
793
849
794
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 )
851
798
if self .drawon :
852
799
self .targetfig .canvas .draw ()
853
800
854
801
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 )
856
805
if self .drawon :
857
806
self .targetfig .canvas .draw ()
858
807
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
+
859
818
860
819
def error_msg_qt (msg , parent = None ):
861
820
if not is_string_like (msg ):
0 commit comments