Add toolbar button icon matplotlib
Question:
I want to add an icon to a custom button in a matplotlib figure toolbar. How can I do that? So far, I have the following code:
import matplotlib
matplotlib.rcParams["toolbar"] = "toolmanager"
import matplotlib.pyplot as plt
from matplotlib.backend_tools import ToolToggleBase
class NewTool(ToolToggleBase):
...[tool code]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], label="legend")
ax.legend()
fig.canvas.manager.toolmanager.add_tool("newtool", NewTool)
fig.canvas.manager.toolbar.add_tool(toolmanager.get_tool("newtool"), "toolgroup")
fig.show()
For now, the only thing that it does is adding a new button (which do what I want) but the icon is only the tool’s name i.e.: “newtool”. How can I change this for a custom icon like a png image?
Answers:
The tool can have an attribute image
, which denotes the path to a png image.
import matplotlib
matplotlib.rcParams["toolbar"] = "toolmanager"
import matplotlib.pyplot as plt
from matplotlib.backend_tools import ToolBase
class NewTool(ToolBase):
image = r"C:pathtohiker.png"
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], label="legend")
ax.legend()
tm = fig.canvas.manager.toolmanager
tm.add_tool("newtool", NewTool)
fig.canvas.manager.toolbar.add_tool(tm.get_tool("newtool"), "toolgroup")
plt.show()
I tried this solution, there is also a similar solution on matplotlib docs, but I >cannot reproduce it. I get the following error: tm.add_tool("newtool", NewTool) >AttributeError: ‘NoneType’ object has no attribute ‘add_tool’ Seems weird that >plt.figure() does not contain canvas. Any ideas? –
bad_locality
Jun 25, 2020 at 12:12
I do not know if it’s help, but I had the same issues at first and then i realized that I had not activated the interactive matplotlib option (%matplotlib with Python – spyder). Therefore no toolbar are associated since it only create a static figure.
I want to add an icon to a custom button in a matplotlib figure toolbar. How can I do that? So far, I have the following code:
import matplotlib
matplotlib.rcParams["toolbar"] = "toolmanager"
import matplotlib.pyplot as plt
from matplotlib.backend_tools import ToolToggleBase
class NewTool(ToolToggleBase):
...[tool code]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], label="legend")
ax.legend()
fig.canvas.manager.toolmanager.add_tool("newtool", NewTool)
fig.canvas.manager.toolbar.add_tool(toolmanager.get_tool("newtool"), "toolgroup")
fig.show()
For now, the only thing that it does is adding a new button (which do what I want) but the icon is only the tool’s name i.e.: “newtool”. How can I change this for a custom icon like a png image?
The tool can have an attribute image
, which denotes the path to a png image.
import matplotlib
matplotlib.rcParams["toolbar"] = "toolmanager"
import matplotlib.pyplot as plt
from matplotlib.backend_tools import ToolBase
class NewTool(ToolBase):
image = r"C:pathtohiker.png"
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], label="legend")
ax.legend()
tm = fig.canvas.manager.toolmanager
tm.add_tool("newtool", NewTool)
fig.canvas.manager.toolbar.add_tool(tm.get_tool("newtool"), "toolgroup")
plt.show()
I tried this solution, there is also a similar solution on matplotlib docs, but I >cannot reproduce it. I get the following error: tm.add_tool("newtool", NewTool) >AttributeError: ‘NoneType’ object has no attribute ‘add_tool’ Seems weird that >plt.figure() does not contain canvas. Any ideas? –
bad_locality
Jun 25, 2020 at 12:12
I do not know if it’s help, but I had the same issues at first and then i realized that I had not activated the interactive matplotlib option (%matplotlib with Python – spyder). Therefore no toolbar are associated since it only create a static figure.