Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 09979bd

Browse files
committed
Alternative UI, using a toolbar menu.
1 parent c27e185 commit 09979bd

File tree

1 file changed

+54
-54
lines changed

1 file changed

+54
-54
lines changed

lib/matplotlib/backends/backend_qt5.py

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import six
44

55
import functools
6+
import operator
67
import os
78
import re
89
import signal
@@ -612,6 +613,13 @@ def _init_toolbar(self):
612613
self._actions[callback] = a
613614
if callback in ['zoom', 'pan']:
614615
a.setCheckable(True)
616+
if callback == 'save_figure':
617+
btn = self.widgetForAction(a)
618+
btn.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
619+
menu = a.__menu = QtWidgets.QMenu()
620+
a.setMenu(menu)
621+
menu.addAction(
622+
'Options for saving', self._ui_get_save_options)
615623
if tooltip_text is not None:
616624
a.setToolTip(tooltip_text)
617625
if text == 'Subplots':
@@ -743,32 +751,29 @@ def save_figure(self, *args):
743751
if startpath != "":
744752
matplotlib.rcParams['savefig.directory'] = (
745753
os.path.dirname(six.text_type(fname)))
746-
options = _default_savefig_options
747-
try:
748-
options = (options
749-
+ [None]
750-
+ _extra_savefig_options[
751-
os.path.splitext(fname)[1].lower()])
752-
except KeyError:
753-
pass
754-
fedit_arg = []
755-
for option in options:
756-
if option is None:
757-
fedit_arg.append((None, None))
758-
else:
759-
fedit_arg.append(option.make_fedit_entry())
760-
fedit_res = formlayout.fedit(fedit_arg, "Options")
761-
if not fedit_res:
762-
return
763-
for option, res in zip(filter(None, options), fedit_res):
764-
option.setter(res)
765754
try:
766755
self.canvas.figure.savefig(six.text_type(fname))
767756
except Exception as e:
768757
QtWidgets.QMessageBox.critical(
769758
self, "Error saving file", six.text_type(e),
770759
QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.NoButton)
771760

761+
def _ui_get_save_options(self):
762+
fedit_arg = []
763+
for tab_name, options in _savefig_options:
764+
fedit_arg.append(([], tab_name, ""))
765+
for option in options:
766+
if option is None:
767+
fedit_arg[-1][0].append((None, None))
768+
else:
769+
fedit_arg[-1][0].append(option.make_fedit_entry())
770+
fedit_res = formlayout.fedit(fedit_arg, "Options")
771+
if not fedit_res:
772+
return
773+
for (tab_name, options), results in zip(_savefig_options, fedit_res):
774+
for option, result in zip(options, results):
775+
option.setter(result)
776+
772777

773778
class _Option(object):
774779

@@ -792,55 +797,50 @@ def make_fedit_entry():
792797
self.setter = setter
793798

794799

795-
_default_savefig_options = [
796-
_Option("DPI", "savefig.dpi"),
797-
_Option("Face color", "savefig.facecolor"),
798-
_Option("Edge color", "savefig.edgecolor"),
799-
_Option("Tight bounding box",
800-
getter=lambda: matplotlib.rcParams["savefig.bbox"] == "tight",
801-
setter=lambda val: matplotlib.rcParams.__setitem__(
802-
"savefig.bbox", "tight" if val else "standard")),
803-
_Option("Tight bounding box padding", "savefig.pad_inches"),
804-
_Option("Transparent background", "savefig.transparent")]
805-
806-
807-
_extra_savefig_options = {
808-
".jpg": [
809-
_Option("JPEG quality", "savefig.jpeg_quality")],
810-
".jpeg": [
811-
_Option("JPEG quality", "savefig.jpeg_quality")],
812-
".pdf": [
813-
_Option("PDF compression", "pdf.compression"),
814-
_Option("PDF font type",
800+
def _make_rc_setter(key):
801+
return functools.partial(operator.setitem, matplotlib.rcParams, key)
802+
803+
804+
_savefig_options = [
805+
("Common", [
806+
_Option("DPI", "savefig.dpi"),
807+
_Option("Face color", "savefig.facecolor"),
808+
_Option("Edge color", "savefig.edgecolor"),
809+
_Option("Tight bounding box",
810+
getter=lambda: matplotlib.rcParams["savefig.bbox"] == "tight",
811+
setter=lambda val: matplotlib.rcParams.__setitem__(
812+
"savefig.bbox", "tight" if val else "standard")),
813+
_Option("Tight bounding box padding", "savefig.pad_inches"),
814+
_Option("Transparent background", "savefig.transparent")]),
815+
("JPEG", [
816+
_Option("Quality", "savefig.jpeg_quality")]),
817+
("PDF", [
818+
_Option("Compression", "pdf.compression"),
819+
_Option("Font type",
815820
getter=lambda:
816821
[str(matplotlib.rcParams["pdf.fonttype"]),
817822
"3", "42"],
818-
setter=lambda val:
819-
matplotlib.rcParams.__setitem__("pdf.fonttype", val))],
820-
".ps": [
821-
_Option("PS paper size",
823+
setter=_make_rc_setter("pdf.fonttype"))]),
824+
("PS", [
825+
_Option("Paper size",
822826
getter=lambda:
823827
[matplotlib.rcParams["ps.papersize"]]
824828
+ ["auto", "letter", "legal", "ledger"]
825829
+ ["A{}".format(i) for i in range(11)]
826830
+ ["B{}".format(i) for i in range(11)],
827-
setter=lambda val:
828-
matplotlib.rcParams.__setitem__("ps.papersize", val)),
829-
_Option("PS use AFM font", "ps.useafm"),
830-
_Option("PS distiller",
831+
setter=_make_rc_setter("ps.papersize")),
832+
_Option("Use AFM font?", "ps.useafm"),
833+
_Option("Distiller",
831834
getter=lambda:
832835
[str(matplotlib.rcParams["ps.usedistiller"])]
833836
+ ["None", "ghostscript", "xpdf"],
834-
setter=lambda val:
835-
matplotlib.rcParams.__setitem__("ps.usedistiller", val)),
836-
_Option("PS distiller resolution", "ps.distiller.res"),
837-
_Option("PS font type",
837+
setter=_make_rc_setter("ps.usedistiller")),
838+
_Option("Distiller resolution", "ps.distiller.res"),
839+
_Option("Font type",
838840
getter=lambda:
839841
[str(matplotlib.rcParams["ps.fonttype"]),
840842
"3", "42"],
841-
setter=lambda val:
842-
matplotlib.rcParams.__setitem__("ps.fonttype", val))]
843-
}
843+
setter=_make_rc_setter("ps.fonttype"))])]
844844

845845

846846
class SubplotToolQt(UiSubplotTool):

0 commit comments

Comments
 (0)