Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5ae09a2

Browse files
committed
Add styling support to Check and Radio buttons
1 parent be7ea76 commit 5ae09a2

File tree

4 files changed

+284
-49
lines changed

4 files changed

+284
-49
lines changed

examples/widgets/check_buttons.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
s2 = np.sin(6*np.pi*t)
2121

2222
fig, ax = plt.subplots()
23-
l0, = ax.plot(t, s0, visible=False, lw=2, color='k', label='2 Hz')
24-
l1, = ax.plot(t, s1, lw=2, color='r', label='4 Hz')
25-
l2, = ax.plot(t, s2, lw=2, color='g', label='6 Hz')
23+
l0, = ax.plot(t, s0, visible=False, lw=2, color='k', label='1 Hz')
24+
l1, = ax.plot(t, s1, lw=2, color='r', label='2 Hz')
25+
l2, = ax.plot(t, s2, lw=2, color='g', label='3 Hz')
2626
fig.subplots_adjust(left=0.2)
2727

2828
lines_by_label = {l.get_label(): l for l in [l0, l1, l2]}
@@ -32,7 +32,10 @@
3232
check = CheckButtons(
3333
ax=rax,
3434
labels=lines_by_label.keys(),
35-
actives=[l.get_visible() for l in lines_by_label.values()]
35+
actives=[l.get_visible() for l in lines_by_label.values()],
36+
label_props={'color': ['k', 'r', 'g']},
37+
frame_props={'edgecolor': ['k', 'r', 'g']},
38+
check_props={'facecolor': ['k', 'r', 'g']},
3639
)
3740

3841

examples/widgets/radio_buttons.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,31 @@
2525

2626
axcolor = 'lightgoldenrodyellow'
2727
rax = fig.add_axes([0.05, 0.7, 0.15, 0.15], facecolor=axcolor)
28-
radio = RadioButtons(rax, ('2 Hz', '4 Hz', '8 Hz'))
28+
radio = RadioButtons(rax, ('1 Hz', '2 Hz', '4 Hz'),
29+
label_props={'color': 'cmy', 'fontsize': [12, 14, 16]},
30+
radio_props={'s': [16, 32, 64]})
2931

3032

3133
def hzfunc(label):
32-
hzdict = {'2 Hz': s0, '4 Hz': s1, '8 Hz': s2}
34+
hzdict = {'1 Hz': s0, '2 Hz': s1, '4 Hz': s2}
3335
ydata = hzdict[label]
3436
l.set_ydata(ydata)
35-
plt.draw()
37+
fig.canvas.draw()
3638
radio.on_clicked(hzfunc)
3739

3840
rax = fig.add_axes([0.05, 0.4, 0.15, 0.15], facecolor=axcolor)
39-
radio2 = RadioButtons(rax, ('red', 'blue', 'green'))
41+
radio2 = RadioButtons(
42+
rax, ('red', 'blue', 'green'),
43+
label_props={'color': ['red', 'blue', 'green']},
44+
radio_props={
45+
'facecolor': ['red', 'blue', 'green'],
46+
'edgecolor': ['darkred', 'darkblue', 'darkgreen'],
47+
})
4048

4149

4250
def colorfunc(label):
4351
l.set_color(label)
44-
plt.draw()
52+
fig.canvas.draw()
4553
radio2.on_clicked(colorfunc)
4654

4755
rax = fig.add_axes([0.05, 0.1, 0.15, 0.15], facecolor=axcolor)
@@ -50,7 +58,7 @@ def colorfunc(label):
5058

5159
def stylefunc(label):
5260
l.set_linestyle(label)
53-
plt.draw()
61+
fig.canvas.draw()
5462
radio3.on_clicked(stylefunc)
5563

5664
plt.show()

lib/matplotlib/tests/test_widgets.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,21 @@ def test_radio_buttons(fig_test, fig_ref):
10191019
ax.text(.25, 1/3, "coffee", transform=ax.transAxes, va="center")
10201020

10211021

1022+
@check_figures_equal(extensions=['png'])
1023+
def test_radio_buttons_props(fig_test, fig_ref):
1024+
label_props = {'color': ['red'], 'fontsize': [24]}
1025+
radio_props = {'facecolor': 'green', 'edgecolor': 'blue', 'linewidth': 2}
1026+
1027+
widgets.RadioButtons(fig_ref.subplots(), ['tea', 'coffee'],
1028+
label_props=label_props, radio_props=radio_props)
1029+
1030+
cb = widgets.RadioButtons(fig_test.subplots(), ['tea', 'coffee'])
1031+
cb.set_label_props(label_props)
1032+
# Setting the label size automatically increases default marker size, so we
1033+
# need to do that here as well.
1034+
cb.set_radio_props({**radio_props, 's': (24 / 2)**2})
1035+
1036+
10221037
@check_figures_equal(extensions=["png"])
10231038
def test_check_buttons(fig_test, fig_ref):
10241039
widgets.CheckButtons(fig_test.subplots(), ["tea", "coffee"], [True, True])
@@ -1031,6 +1046,29 @@ def test_check_buttons(fig_test, fig_ref):
10311046
ax.text(.25, 1/3, "coffee", transform=ax.transAxes, va="center")
10321047

10331048

1049+
@check_figures_equal(extensions=['png'])
1050+
def test_check_button_props(fig_test, fig_ref):
1051+
label_props = {'color': ['red'], 'fontsize': [24]}
1052+
frame_props = {'facecolor': 'green', 'edgecolor': 'blue', 'linewidth': 2}
1053+
check_props = {'facecolor': 'red', 'linewidth': 2}
1054+
1055+
widgets.CheckButtons(fig_ref.subplots(), ['tea', 'coffee'], [True, True],
1056+
label_props=label_props, frame_props=frame_props,
1057+
check_props=check_props)
1058+
1059+
cb = widgets.CheckButtons(fig_test.subplots(), ['tea', 'coffee'],
1060+
[True, True])
1061+
cb.set_label_props(label_props)
1062+
# Setting the label size automatically increases default marker size, so we
1063+
# need to do that here as well.
1064+
cb.set_frame_props({**frame_props, 's': (24 / 2)**2})
1065+
# FIXME: Axes.scatter promotes facecolor to edgecolor on unfilled markers,
1066+
# but Collection.update doesn't do that (it forgot the marker already).
1067+
# This means we cannot pass facecolor to both setters directly.
1068+
check_props['edgecolor'] = check_props.pop('facecolor')
1069+
cb.set_check_props({**check_props, 's': (24 / 2)**2})
1070+
1071+
10341072
@check_figures_equal(extensions=["png"])
10351073
def test_check_buttons_rectangles(fig_test, fig_ref):
10361074
# Test should be removed once .rectangles is removed

0 commit comments

Comments
 (0)