Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

FIX: macosx animations#21768

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Closed

Conversation

greglucas
Copy link
Contributor

The macosx backend would not update on flush_events calls due to the loop being run too fast for the view to update properly in the NSApp. Fix that by adding an unnoticeable RunLoop timer slowdown that allows the app to see the changes. Putting anNSLog into the drawRect loop before and after this produced identical results, taking 0.021 seconds per iteration, but with this addition, the draw update actually happens.

It doesn't feel super ideal, but this method is apparently used by others...link to google book

Example from#17642

importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(0,2*np.pi,100)fig,ax=plt.subplots()# animated=True tells matplotlib to only draw the artist when we# explicitly request it(ln,)=ax.plot(x,np.sin(x),animated=True)# make sure the window is raised, but the script keeps goingplt.show(block=False)# stop to admire our empty window axes and ensure it is rendered at# least once.## We need to fully draw the figure at its final size on the screen# before we continue on so that :#  a) we have the correctly sized and drawn background to grab#  b) we have a cached renderer so that ``ax.draw_artist`` works# so we spin the event loop to let the backend process any pending operationsplt.pause(0.1)# get copy of entire figure (everything inside fig.bbox) sans animated artistbg=fig.canvas.copy_from_bbox(fig.bbox)# draw the animated artist, this uses a cached rendererax.draw_artist(ln)# show the result to the screen, this pushes the updated RGBA buffer from the# renderer to the GUI framework so you can see itfig.canvas.blit(fig.bbox)forjinrange(100):# reset the background back in the canvas state, screen unchangedfig.canvas.restore_region(bg)# update the artist, neither the canvas state nor the screen have changedln.set_ydata(np.sin(x+ (j/100)*np.pi))# re-render the artist, updating the canvas state, but not the screenax.draw_artist(ln)# copy the image to the GUI state, but screen might not changed yetfig.canvas.blit(fig.bbox)# flush any pending GUI events, re-painting the screen if neededfig.canvas.flush_events()# you can put a pause in if you want to slow things down# plt.pause(.1)

Closes#17642

PR Summary

PR Checklist

Tests and Styling

  • Has pytest style unit tests (andpytest passes).
  • IsFlake 8 compliant (installflake8-docstrings and runflake8 --docstring-convention=all).

Documentation

  • New features are documented, with examples if plot related.
  • New features have an entry indoc/users/next_whats_new/ (follow instructions in README.rst there).
  • API changes documented indoc/api/next_api_changes/ (follow instructions in README.rst there).
  • Documentation is sphinx and numpydoc compliant (the docs shouldbuild without error).

The macosx backend would not update on flush_events calls due to theloop being run too fast for the view to update properly in the NSApp.Fix that by adding an unnoticeable RunLoop timer slowdown thatallows the app to see the changes.
Copy link
Member

@QuLogicQuLogic left a comment

Choose a reason for hiding this comment

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

Seems okay based on the book, but I guess someone else on macOS should test too.

@greglucasgreglucas marked this pull request as draftNovember 29, 2021 04:30
@greglucas
Copy link
ContributorAuthor

I'm going to convert this to draft for now. I think#21790 is a better solution and also addresses this issue.

@greglucas
Copy link
ContributorAuthor

I'm going to close this in the hopes of#21790 being merged with this commit in it.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@QuLogicQuLogicQuLogic approved these changes

Assignees
No one assigned
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

bring osx backend flush_events to feature parity with other backend
2 participants
@greglucas@QuLogic

[8]ページ先頭

©2009-2025 Movatter.jp