Skip to content

Commit c3e7d13

Browse files
committed
add MatplotNavToolbar widget to factory registers
1 parent 0f163b1 commit c3e7d13

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

kivy_matplotlib_widget/factory_registers.py

+1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
r("MatplotFigure3D", module="kivy_matplotlib_widget.uix.graph_widget_3d")
88
r("MatplotFigureGeneral", module="kivy_matplotlib_widget.uix.graph_widget_general")
99
r("MatplotFigureTwinx", module="kivy_matplotlib_widget.uix.graph_widget_twinx")
10+
r("MatplotNavToolbar", module="kivy_matplotlib_widget.uix.navigation_bar_widget")
1011
r("LegendRv", module="kivy_matplotlib_widget.uix.legend_widget")
1112
r("LegendRvHorizontal", module="kivy_matplotlib_widget.uix.legend_widget")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from matplotlib.backend_bases import NavigationToolbar2
2+
from kivy.properties import ObjectProperty
3+
from kivy.lang import Builder
4+
from kivy.uix.boxlayout import BoxLayout
5+
6+
class MatplotNavToolbar(BoxLayout):
7+
8+
"""Figure Toolbar"""
9+
pan_btn = ObjectProperty(None)
10+
zoom_btn = ObjectProperty(None)
11+
home_btn = ObjectProperty(None)
12+
back_btn = ObjectProperty(None)
13+
forward_btn = ObjectProperty(None)
14+
info_lbl = ObjectProperty(None)
15+
_navtoolbar = None # Internal NavToolbar logic
16+
figure_widget = ObjectProperty(None)
17+
18+
def __init__(self, figure_widget=None, *args, **kwargs):
19+
super(MatplotNavToolbar, self).__init__(*args, **kwargs)
20+
self.figure_widget = figure_widget
21+
22+
def on_figure_widget(self, obj, value):
23+
self.figure_widget.bind(figcanvas=self._canvas_ready)
24+
25+
def _canvas_ready(self, obj, value):
26+
self._navtoolbar = _NavigationToolbar(value, self)
27+
self._navtoolbar.figure_widget = obj
28+
29+
30+
class _NavigationToolbar(NavigationToolbar2):
31+
figure_widget = None
32+
33+
def __init__(self, canvas, widget):
34+
self.widget = widget
35+
super(_NavigationToolbar, self).__init__(canvas)
36+
37+
def _init_toolbar(self):
38+
print('init toolbar')
39+
self.widget.home_btn.bind(on_press=self.home)
40+
self.widget.pan_btn.bind(on_press=self.pan)
41+
self.widget.zoom_btn.bind(on_press=self.zoom)
42+
self.widget.back_btn.bind(on_press=self.back)
43+
self.widget.forward_btn.bind(on_press=self.forward)
44+
45+
def dynamic_update(self):
46+
self.canvas.draw()
47+
48+
def draw_rubberband(self, event, x0, y0, x1, y1):
49+
self.figure_widget.draw_box(event, x0, y0, x1, y1)
50+
51+
def set_message(self, s):
52+
self.widget.info_lbl.text = s
53+
54+
from kivy.factory import Factory
55+
Factory.register('MatplotNavToolbar', MatplotNavToolbar)
56+
57+
Builder.load_string('''
58+
<MatplotNavToolbar>:
59+
orientation: 'vertical'
60+
home_btn: home_btn
61+
pan_btn: pan_btn
62+
zoom_btn: zoom_btn
63+
info_lbl: info_lbl
64+
back_btn: back_btn
65+
forward_btn: forward_btn
66+
Label:
67+
id: info_lbl
68+
size_hint: 1, 0.3
69+
BoxLayout:
70+
size_hint: 1, 0.7
71+
Button:
72+
id: home_btn
73+
text: "Home"
74+
Button:
75+
id: back_btn
76+
text: "Back"
77+
Button:
78+
id: forward_btn
79+
text: "Forward"
80+
ToggleButton:
81+
id: pan_btn
82+
text: "Pan"
83+
group: "toolbar_btn"
84+
ToggleButton:
85+
id: zoom_btn
86+
text: "Zoom"
87+
group: "toolbar_btn"
88+
89+
''')

0 commit comments

Comments
 (0)