Title: Updating MEP22 · Issue #8712 · matplotlib/matplotlib · GitHub
Open Graph Title: Updating MEP22 · Issue #8712 · matplotlib/matplotlib
X Title: Updating MEP22 · Issue #8712 · matplotlib/matplotlib
Description: @fariza @tacaswell Although I like, in general, the idea of MEP22, there are a number of details that I would like to change. If we can agree on how to handle them, I would be happy to push the qt implementation. We'd still need a wx imp...
Open Graph Description: @fariza @tacaswell Although I like, in general, the idea of MEP22, there are a number of details that I would like to change. If we can agree on how to handle them, I would be happy to push the qt ...
X Description: @fariza @tacaswell Although I like, in general, the idea of MEP22, there are a number of details that I would like to change. If we can agree on how to handle them, I would be happy to push the qt ...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/8712
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Updating MEP22","articleBody":"@fariza @tacaswell \r\n\r\nAlthough I like, in general, the idea of MEP22, there are a number of details that I would like to change. If we can agree on how to handle them, I would be happy to push the qt implementation. We'd still need a wx implementation (which would be painful for me to write but I guess I could cargo-cult it if no one else volunteers) and a macos implementation (which I would have no way to work on).\r\n\r\nA quick look suggests the following points (I may think of other stuff later):\r\n\r\nSuggested changes to MEP22\r\n\r\n### Change `_get_cls_to_instantiate`\r\n\r\nEdit: Fixed by #20990.\r\n\r\nCurrently, `backend_tools` defines a `default_tools` dict, which maps tool names to either classes, or names of classes; for the latter, `toolmanager.add_tool` resolves the name in the current module context (e.g., the `'cursor': 'ToolSetCursor'` tool resolves to whatever class is named `ToolSetCursor` in the current backend module). This looks brittle (e.g., one cannot override a tool that is specified directly as a class in `default_tools`). Instead, I propose that that `default_tools` simply becomes a list of default tools, that the name becomes a class attribute, and that overrides in backends get specified using a decorator\r\n```\r\n@tools.override(backend=\"qt5agg\")\r\nclass ToolX(backend_tools.ToolX):\r\n ...\r\n```\r\n(possibly stacking decorators if the override applies to multiple backends). The decorator registers an override for the ancestor class(es), and would store the relevant override information somewhere for later use in `add_tool`.\r\n\r\nPossibly, some default tools could be abstract, always requiring the backend to reimplement them, but not erroring if this is not the case (the tool is then just not available).\r\n\r\n### Get rid of the `data` kwarg to `Tool.trigger`\r\n\r\nAFAICT this kwarg is *only* present so that ZoomTool can pass to RubberbandTool the coordinates where a rubberband needs to be drawn. I would simply get rid of RubberbandTool and let ZoomTool define the relevant drawing methods as abstract methods that need to be overriden by the individual backends.\r\n\r\n### Get rid of the `sender` kwarg to `Tool.trigger`?\r\n\r\n(Its purpose is not clear to me, but perhaps I am missing something.)\r\n\r\n### Let togglable tools be implemented as contextmanagers (instead of enable/disable)\r\n\r\nIn general, this helps having to stick a bunch of temporary attributes on the instance to store the state. The caller code can always call `__enter__` and `__exit__` manually.\r\n\r\n### `ToolBase.destroy(self, *args)` should lose the `*args` in the signature\r\n\r\nEdit: Fixed by #22509.\r\n\r\nWhy do we need it?\r\n\r\n### What is happening with NavigationBase?\r\n\r\nThe class does not seem to be implemented anywhere. A similar but not identical API seems implemented by ToolManager.\r\n\r\n### Support sub-tools as menus to the tool button?\r\n\r\nEdit: Essentially fixed (from my POV) by figure.hooks.\r\n\r\ne.g. https://github.com/matplotlib/matplotlib/pull/7696#issuecomment-306069093","author":{"url":"https://github.com/anntzer","@type":"Person","name":"anntzer"},"datePublished":"2017-06-04T00:17:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":45},"url":"https://github.com/8712/matplotlib/issues/8712"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:c5b0fb69-19ad-ccd0-9e78-9c5d84b9f72d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D1BA:2A0FAF:107C380:169800E:6A53BDC2 |
| html-safe-nonce | b2966b6bb82f3e79e61a10a8f531827f5d238bd17e4a5dc21e60ee87b04adbdc |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMUJBOjJBMEZBRjoxMDdDMzgwOjE2OTgwMEU6NkE1M0JEQzIiLCJ2aXNpdG9yX2lkIjoiNzgyNjg0Njc4NzkzNTkxMTM2MiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 70355efebe845e285e144e8275b71b79bf03499969e95e7f579295f1863f9493 |
| hovercard-subject-tag | issue:233403122 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/8712/issue_layout |
| twitter:image | https://opengraph.githubassets.com/675a7048cdb1ed2a4ed7c8ffbb3045489a7d54a709ed2ff5b5af6ee1e5213fc4/matplotlib/matplotlib/issues/8712 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/675a7048cdb1ed2a4ed7c8ffbb3045489a7d54a709ed2ff5b5af6ee1e5213fc4/matplotlib/matplotlib/issues/8712 |
| og:image:alt | @fariza @tacaswell Although I like, in general, the idea of MEP22, there are a number of details that I would like to change. If we can agree on how to handle them, I would be happy to push the qt ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | anntzer |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width