-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
[Bug]: Widget blitting broken when saving as PDF #25075
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Further investigation shows that this is not directly about the PDF backend. Rather, it occurs when changing to the PDF backend to save as a |
Defining diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py
index 7bd0afc456..d7adfdf53c 100644
--- a/lib/matplotlib/backends/backend_pdf.py
+++ b/lib/matplotlib/backends/backend_pdf.py
@@ -2796,6 +2796,12 @@ class FigureCanvasPdf(FigureCanvasBase):
def get_default_filetype(self):
return 'pdf'
+ def get_renderer(self):
+ if hasattr(self, '_renderer'):
+ return self._renderer
+ else:
+ raise ValueError('PDF must be saving to get a renderer')
+
def print_pdf(self, filename, *,
bbox_inches_restore=None, metadata=None):
@@ -2808,12 +2814,15 @@ class FigureCanvasPdf(FigureCanvasBase):
file = PdfFile(filename, metadata=metadata)
try:
file.newPage(width, height)
- renderer = MixedModeRenderer(
+ self._renderer = MixedModeRenderer(
self.figure, width, height, dpi,
RendererPdf(file, dpi, height, width),
bbox_inches_restore=bbox_inches_restore)
- self.figure.draw(renderer)
- renderer.finalize()
+ try:
+ self.figure.draw(self._renderer)
+ self._renderer.finalize()
+ finally:
+ del self._renderer
if not isinstance(filename, PdfPages):
file.finalize()
finally: Not sure if that's the best fix though. |
Because we may switch the canvas to a different type (that may not support blitting) when saving, check it `_clear` that the current canvas is the canvas we expect when we update the blitting caches on the draw_event callback. Closes matplotlib#25075
Because we may switch the canvas to a different type (that may not support blitting) when saving, check it `_clear` that the current canvas is the canvas we expect when we update the blitting caches on the draw_event callback. Closes matplotlib#25075
Bug summary
When running a test doc build for 3.7.0rc1, I build the PDF, which runs everything with the PDF backend. So either the PDF backend does not correctly mark itself as not supporting blitting, or the blitting is not turned off correctly in the button widgets.
Code for reproduction
Actual outcome
Expected outcome
Docs build without warning.
Additional information
No response
Operating system
Fedora 37
Matplotlib Version
v3.7.x
Matplotlib Backend
PDF
Python version
3.11.1
Jupyter version
No response
Installation
git checkout
The text was updated successfully, but these errors were encountered: