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
@@ -521,6 +523,7 @@ def _init_toolbar(self):
521
523
522
524
self .show_all ()
523
525
526
+ @cbook .deprecated ("3.1" )
524
527
def get_filechooser (self ):
525
528
fc = FileChooserDialog (
526
529
title = 'Save the figure' ,
@@ -532,24 +535,54 @@ def get_filechooser(self):
532
535
return fc
533
536
534
537
def save_figure (self , * args ):
535
- chooser = self .get_filechooser ()
536
- fname , format = chooser .get_filename_from_user ()
537
- chooser .destroy ()
538
- if fname :
539
- startpath = os .path .expanduser (rcParams ['savefig.directory' ])
540
- # Save dir for next time, unless empty str (i.e., use cwd).
541
- if startpath != "" :
542
- rcParams ['savefig.directory' ] = os .path .dirname (fname )
543
- try :
544
- self .canvas .figure .savefig (fname , format = format )
545
- except Exception as e :
546
- error_msg_gtk (str (e ), parent = self )
538
+ dialog = Gtk .FileChooserDialog (
539
+ title = "Save the figure" ,
540
+ parent = self .canvas .get_toplevel (),
541
+ action = Gtk .FileChooserAction .SAVE ,
542
+ buttons = (Gtk .STOCK_CANCEL , Gtk .ResponseType .CANCEL ,
543
+ Gtk .STOCK_SAVE , Gtk .ResponseType .OK ),
544
+ )
545
+ for name , fmts \
546
+ in self .canvas .get_supported_filetypes_grouped ().items ():
547
+ ff = Gtk .FileFilter ()
548
+ ff .set_name (name )
549
+ for fmt in fmts :
550
+ ff .add_pattern ("*." + fmt )
551
+ dialog .add_filter (ff )
552
+ if self .canvas .get_default_filetype () in fmts :
553
+ dialog .set_filter (ff )
554
+
555
+ @functools .partial (dialog .connect , "notify::filter" )
556
+ def on_notify_filter (* args ):
557
+ name = dialog .get_filter ().get_name ()
558
+ fmt = self .canvas .get_supported_filetypes_grouped ()[name ][0 ]
559
+ dialog .set_current_name (
560
+ str (Path (dialog .get_current_name ()).with_suffix ("." + fmt )))
561
+
562
+ dialog .set_current_folder (rcParams ["savefig.directory" ])
563
+ dialog .set_current_name (self .canvas .get_default_filename ())
564
+ dialog .set_do_overwrite_confirmation (True )
565
+
566
+ response = dialog .run ()
567
+ fname = dialog .get_filename ()
568
+ ff = dialog .get_filter () # Doesn't autoadjust to filename :/
569
+ fmt = self .canvas .get_supported_filetypes_grouped ()[ff .get_name ()][0 ]
570
+ dialog .destroy ()
571
+ if response == Gtk .ResponseType .CANCEL :
572
+ return
573
+ # Save dir for next time, unless empty str (which means use cwd).
574
+ if rcParams ['savefig.directory' ]:
575
+ rcParams ['savefig.directory' ] = os .path .dirname (fname )
576
+ try :
577
+ self .canvas .figure .savefig (fname , format = fmt )
578
+ except Exception as e :
579
+ error_msg_gtk (str (e ), parent = self )
547
580
548
581
def configure_subplots (self , button ):
549
582
toolfig = Figure (figsize = (6 , 3 ))
550
583
canvas = self ._get_canvas (toolfig )
551
584
toolfig .subplots_adjust (top = 0.9 )
552
- tool = SubplotTool (self .canvas .figure , toolfig )
585
+ tool = SubplotTool (self .canvas .figure , toolfig )
553
586
554
587
w = int (toolfig .bbox .width )
555
588
h = int (toolfig .bbox .height )
@@ -582,6 +615,7 @@ def set_history_buttons(self):
582
615
self ._gtk_ids ['Forward' ].set_sensitive (can_forward )
583
616
584
617
618
+ @cbook .deprecated ("3.1" )
585
619
class FileChooserDialog (Gtk .FileChooserDialog ):
586
620
"""GTK+ file selector which remembers the last file/directory
587
621
selected and presents the user with a menu of supported image formats
@@ -777,6 +811,7 @@ def set_message(self, s):
777
811
778
812
class SaveFigureGTK3 (backend_tools .SaveFigureBase ):
779
813
814
+ @cbook .deprecated ("3.1" )
780
815
def get_filechooser (self ):
781
816
fc = FileChooserDialog (
782
817
title = 'Save the figure' ,
@@ -788,21 +823,11 @@ def get_filechooser(self):
788
823
return fc
789
824
790
825
def trigger (self , * args , ** kwargs ):
791
- chooser = self .get_filechooser ()
792
- fname , format_ = chooser .get_filename_from_user ()
793
- chooser .destroy ()
794
- if fname :
795
- startpath = os .path .expanduser (rcParams ['savefig.directory' ])
796
- if startpath == '' :
797
- # explicitly missing key or empty str signals to use cwd
798
- rcParams ['savefig.directory' ] = startpath
799
- else :
800
- # save dir for next time
801
- rcParams ['savefig.directory' ] = os .path .dirname (fname )
802
- try :
803
- self .figure .canvas .print_figure (fname , format = format_ )
804
- except Exception as e :
805
- error_msg_gtk (str (e ), parent = self )
826
+
827
+ class PseudoToolbar :
828
+ canvas = self .figure .canvas
829
+
830
+ return NavigationToolbar2GTK3 .save_figure (PseudoToolbar ())
806
831
807
832
808
833
class SetCursorGTK3 (backend_tools .SetCursorBase ):
0 commit comments