1
+ import functools
1
2
import logging
2
3
import os
4
+ from pathlib import Path
3
5
import sys
4
6
5
7
import matplotlib
@@ -518,6 +520,7 @@ def _init_toolbar(self):
518
520
519
521
self .show_all ()
520
522
523
+ @cbook .deprecated ("3.1" )
521
524
def get_filechooser (self ):
522
525
fc = FileChooserDialog (
523
526
title = 'Save the figure' ,
@@ -529,24 +532,54 @@ def get_filechooser(self):
529
532
return fc
530
533
531
534
def save_figure (self , * args ):
532
- chooser = self .get_filechooser ()
533
- fname , format = chooser .get_filename_from_user ()
534
- chooser .destroy ()
535
- if fname :
536
- startpath = os .path .expanduser (rcParams ['savefig.directory' ])
537
- # Save dir for next time, unless empty str (i.e., use cwd).
538
- if startpath != "" :
539
- rcParams ['savefig.directory' ] = os .path .dirname (fname )
540
- try :
541
- self .canvas .figure .savefig (fname , format = format )
542
- except Exception as e :
543
- error_msg_gtk (str (e ), parent = self )
535
+ dialog = Gtk .FileChooserDialog (
536
+ title = "Save the figure" ,
537
+ parent = self .canvas .get_toplevel (),
538
+ action = Gtk .FileChooserAction .SAVE ,
539
+ buttons = (Gtk .STOCK_CANCEL , Gtk .ResponseType .CANCEL ,
540
+ Gtk .STOCK_SAVE , Gtk .ResponseType .OK ),
541
+ )
542
+ for name , fmts \
543
+ in self .canvas .get_supported_filetypes_grouped ().items ():
544
+ ff = Gtk .FileFilter ()
545
+ ff .set_name (name )
546
+ for fmt in fmts :
547
+ ff .add_pattern ("*." + fmt )
548
+ dialog .add_filter (ff )
549
+ if self .canvas .get_default_filetype () in fmts :
550
+ dialog .set_filter (ff )
551
+
552
+ @functools .partial (dialog .connect , "notify::filter" )
553
+ def on_notify_filter (* args ):
554
+ name = dialog .get_filter ().get_name ()
555
+ fmt = self .canvas .get_supported_filetypes_grouped ()[name ][0 ]
556
+ dialog .set_current_name (
557
+ str (Path (dialog .get_current_name ()).with_suffix ("." + fmt )))
558
+
559
+ dialog .set_current_folder (rcParams ["savefig.directory" ])
560
+ dialog .set_current_name (self .canvas .get_default_filename ())
561
+ dialog .set_do_overwrite_confirmation (True )
562
+
563
+ response = dialog .run ()
564
+ fname = dialog .get_filename ()
565
+ ff = dialog .get_filter () # Doesn't autoadjust to filename :/
566
+ fmt = self .canvas .get_supported_filetypes_grouped ()[ff .get_name ()][0 ]
567
+ dialog .destroy ()
568
+ if response == Gtk .ResponseType .CANCEL :
569
+ return
570
+ # Save dir for next time, unless empty str (which means use cwd).
571
+ if rcParams ['savefig.directory' ]:
572
+ rcParams ['savefig.directory' ] = os .path .dirname (fname )
573
+ try :
574
+ self .canvas .figure .savefig (fname , format = fmt )
575
+ except Exception as e :
576
+ error_msg_gtk (str (e ), parent = self )
544
577
545
578
def configure_subplots (self , button ):
546
579
toolfig = Figure (figsize = (6 , 3 ))
547
580
canvas = self ._get_canvas (toolfig )
548
581
toolfig .subplots_adjust (top = 0.9 )
549
- tool = SubplotTool (self .canvas .figure , toolfig )
582
+ tool = SubplotTool (self .canvas .figure , toolfig )
550
583
551
584
w = int (toolfig .bbox .width )
552
585
h = int (toolfig .bbox .height )
@@ -573,6 +606,7 @@ def _get_canvas(self, fig):
573
606
return self .canvas .__class__ (fig )
574
607
575
608
609
+ @cbook .deprecated ("3.1" )
576
610
class FileChooserDialog (Gtk .FileChooserDialog ):
577
611
"""GTK+ file selector which remembers the last file/directory
578
612
selected and presents the user with a menu of supported image formats
@@ -768,6 +802,7 @@ def set_message(self, s):
768
802
769
803
class SaveFigureGTK3 (backend_tools .SaveFigureBase ):
770
804
805
+ @cbook .deprecated ("3.1" )
771
806
def get_filechooser (self ):
772
807
fc = FileChooserDialog (
773
808
title = 'Save the figure' ,
@@ -779,21 +814,11 @@ def get_filechooser(self):
779
814
return fc
780
815
781
816
def trigger (self , * args , ** kwargs ):
782
- chooser = self .get_filechooser ()
783
- fname , format_ = chooser .get_filename_from_user ()
784
- chooser .destroy ()
785
- if fname :
786
- startpath = os .path .expanduser (rcParams ['savefig.directory' ])
787
- if startpath == '' :
788
- # explicitly missing key or empty str signals to use cwd
789
- rcParams ['savefig.directory' ] = startpath
790
- else :
791
- # save dir for next time
792
- rcParams ['savefig.directory' ] = os .path .dirname (fname )
793
- try :
794
- self .figure .canvas .print_figure (fname , format = format_ )
795
- except Exception as e :
796
- error_msg_gtk (str (e ), parent = self )
817
+
818
+ class PseudoToolbar :
819
+ canvas = self .figure .canvas
820
+
821
+ return NavigationToolbar2GTK3 .save_figure (PseudoToolbar ())
797
822
798
823
799
824
class SetCursorGTK3 (backend_tools .SetCursorBase ):
0 commit comments