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

Skip to content

Conversation

@QuLogic
Copy link
Member

@QuLogic QuLogic commented Jul 14, 2023

PR summary

In some cases, Qt will itself trigger a paint event after closing the file save dialog. When that happens, we need to be sure that the internal canvas is re-drawn. However, if the user is using an automatically-chosen Qt backend but saving with a different backend (such as pgf), we do not want to trigger a full draw in Qt, so just set the flag for next time.

Fixes #26272

I don't really know how to test this one.

PR checklist

@QuLogic QuLogic added Release critical For bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions. GUI: Qt labels Jul 14, 2023
@QuLogic QuLogic added this to the v3.8.0 milestone Jul 14, 2023
In some cases, Qt will itself trigger a paint event after closing the
file save dialog. When that happens, we need to be sure that the
internal canvas is re-drawn. However, if the user is using an
automatically-chosen Qt backend but saving with a different backend
(such as pgf), we do not want to trigger a full draw in Qt, so just set
the flag for next time.

Fixes matplotlib#26272
@tacaswell
Copy link
Member

Do we need a similar change for wx?

@QuLogic
Copy link
Member Author

QuLogic commented Jul 14, 2023

I forgot to mention that I tried wx (on Windows at least), and it didn't seem to need a similar change. I can't say whether some other platform will trigger this in the same way that Qt doesn't seem to be consistent.

# save dialog. When that happens, we need to be sure that the internal canvas is
# re-drawn. However, if the user is using an automatically-chosen Qt backend but
# saving with a different backend (such as pgf), we do not want to trigger a
# full draw in Qt, so just set the flag for next time.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is going to force a full re-render the next time the window paints itself no matter which canvas class was actually selected.

The advantage of doing this rather than `self.draw_idle8 that this won't trigger the repaint and redraw on its own?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is going to force a full re-render the next time the window paints itself no matter which canvas class was actually selected.

Yes, this would be the same as before #25713.

The advantage of doing this rather than `self.draw_idle8 that this won't trigger the repaint and redraw on its own?

Yes, draw_idle will add a timer and actually draw later; we don't want that in order to keep the fix for #5234.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@QuLogic Thanks for investigating this. On the side of mplcairo.qt I had the same issue, but took a slightly different approach to fix it (matplotlib/mplcairo@cd6d2ca): I stash the old renderer before calling print_figure, and then restore it at the end, which always saves the need for a redraw. Perhaps the same can be done here? (Not that I actually checked.)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This suggests a more general change in that print_figure should always make a new canvas object even if the currently in-use canvas can technically save the format requested. This would simplify some of the logic a bit (I think) and would probably save a bunch of dpi changing work...

@ksunden ksunden merged commit 477f781 into matplotlib:main Jul 15, 2023
@QuLogic QuLogic deleted the fix-qt-savefig branch July 15, 2023 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

GUI: Qt Release critical For bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: qt window blank after using save button

4 participants