8000 MEP22 first draft (DO NOT MERGE) by fariza · Pull Request #2740 · matplotlib/matplotlib · GitHub
[go: up one dir, main page]

Skip to content

MEP22 first draft (DO NOT MERGE) #2740

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

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
improving the example
  • Loading branch information
fariza committed Jan 17, 2014
commit 72ce737b1c0c402bf8b28edb9734de2437e7e8f7
26 changes: 24 additions & 2 deletions examples/user_interfaces/navigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,29 @@

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3])
ax.plot([1, 2, 3], label='My First line')
ax.plot([2, 3, 4], label='Second line')

fig.canvas.manager.navigation.list_tools()


from matplotlib.backend_bases import ToolBase
class ListTools(ToolBase):
#keyboard shortcut
keymap = 'm'
#Name used as id, must be unique between tools of the same navigation
name = 'List'
description = 'List Tools'
#Where to put it in the toolbar, -1 = at the end, None = Not in toolbar
position = -1

def activate(self, event):
#The most important attributes are navigation and figure
self.navigation.list_tools()

#Add the simple tool to the toolbar
fig.canvas.manager.navigation.add_tool(ListTools)

#Just for fun, lets remove the back button
fig.canvas.manager.navigation.remove_tool('Back')

plt.show()
33 changes: 27 additions & 6 deletions lib/matplotlib/backend_bases.py
Original file line number Diff line number Diff line change
Expand Up @@ -2973,9 +2973,21 @@ def _get_toolbar(self, toolbar, canvas):

#remove persistent instances
def unregister(self, name):
if self._toggled == name:
self._handle_toggle(name, from_toolbar=False)
if name in self._instances:
del self._instances[name]

def remove_tool(self, name):
self.unregister(name)
del self._tools[name]
keys = [k for k, v in self._keys.items() if v == name]
for k in keys:
del self._keys[k]

if self.toolbar:
self.toolbar.remove_toolitem(name)

def add_tool(self, callback_class):
tool = self._get_cls_to_instantiate(callback_class)
name = tool.name
Expand All @@ -2995,7 +3007,10 @@ def add_tool(self, callback_class):

if self.toolbar and tool.position is not None:
basedir = os.path.join(rcParams['datapath'], 'images')
fname = os.path.join(basedir, tool.image + '.png')
if tool.image is not None:
fname = os.path.join(basedir, tool.image + '.png')
else:
fname = 'Unknown'
self.toolbar.add_toolitem(name, tool.description,
fname,
tool.position,
Expand Down Expand Up @@ -3089,13 +3104,16 @@ def _handle_toggle(self, name, event=None, from_toolbar=False):
a.set_navigate_mode(self._toggled)

def list_tools(self):
print ("{0:20} {1:40} {2}".format('Name (id)', 'Tool description',
print ('_' * 80)
print ("{0:20} {1:50} {2}".format('Name (id)', 'Tool description',
'Keymap'))
print ('_' * 50, '\n')
for id_, tool in self._tools.items():
keys = [k for k, i in self._keys.items() if i == id_]
print ("{0:20} {1:40} {2}".format(tool.name, tool.description,
print ('_' * 80)
for name in sorted(self._tools.keys()):
tool = self._tools[name]
keys = [k for k, i in self._keys.items() if i == name]
print ("{0:20} {1:50} {2}".format(tool.name, tool.description,
', '.join(keys)))
print ('_' * 80, '\n')

def update(self):
"""Reset the axes stack"""
Expand Down Expand Up @@ -3317,3 +3335,6 @@ def set_message(self, s):
def toggle(self, name, callback=False):
#carefull, callback means to perform or not the callback while toggling
raise NotImplementedError

def remove_toolitem(self, name):
pass
8 changes: 8 additions & 0 deletions lib/matplotlib/backends/backend_gtk3.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,14 @@ def toggle(self, name, callback=False):
if not callback:
self._toolitems[name].handler_unblock(self._signals[name])

def remove_toolitem(self, name):
if name not in self._toolitems:
#TODO: raise warning
print('Not in toolbar', name)
return
self._toolbar.remove(self._toolitems[name])
del self._toolitems[name]

4793
class FileChooserDialog(Gtk.FileChooserDialog):
"""GTK+ file selector which remembers the last file/directory
Expand Down
0