From 705568a578d7275b32c6f9878924a8539f99978d Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Thu, 21 Sep 2023 10:04:23 +0200 Subject: [PATCH] Remove deprecations and make arguments keyword only --- ci/mypy-stubtest-allowlist.txt | 1 - .../next_api_changes/removals/26853-OG.rst | 26 +++ .../test_widgets/check_radio_buttons.png | Bin 24315 -> 23386 bytes lib/matplotlib/tests/test_widgets.py | 59 ------ lib/matplotlib/widgets.py | 174 +++--------------- lib/matplotlib/widgets.pyi | 9 +- 6 files changed, 54 insertions(+), 215 deletions(-) create mode 100644 doc/api/next_api_changes/removals/26853-OG.rst diff --git a/ci/mypy-stubtest-allowlist.txt b/ci/mypy-stubtest-allowlist.txt index 99216f5f75eb..64fae8d44562 100644 --- a/ci/mypy-stubtest-allowlist.txt +++ b/ci/mypy-stubtest-allowlist.txt @@ -54,7 +54,6 @@ matplotlib.cm.register_cmap matplotlib.cm.unregister_cmap matplotlib.collections.PolyCollection.span_where matplotlib.gridspec.GridSpecBase.get_grid_positions -matplotlib.widgets.MultiCursor.needclear # 3.8 deprecations matplotlib.cbook.get_sample_data diff --git a/doc/api/next_api_changes/removals/26853-OG.rst b/doc/api/next_api_changes/removals/26853-OG.rst new file mode 100644 index 000000000000..dc5c37e38db5 --- /dev/null +++ b/doc/api/next_api_changes/removals/26853-OG.rst @@ -0,0 +1,26 @@ +Most arguments to widgets have been made keyword-only +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Passing all but the very few first arguments positionally in the constructors +of Widgets is now keyword-only. In general, all optional arguments are keyword-only. + +``RadioButtons.circles`` +~~~~~~~~~~~~~~~~~~~~~~~~ + +... is removed. (``RadioButtons`` now draws itself using `~.Axes.scatter`.) + +``CheckButtons.rectangles`` and ``CheckButtons.lines`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``CheckButtons.rectangles`` and ``CheckButtons.lines`` are removed. +(``CheckButtons`` now draws itself using `~.Axes.scatter`.) + +Remove unused parameter *x* to ``TextBox.begin_typing`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This parameter was unused in the method, but was a required argument. + +``MultiCursor.needclear`` +~~~~~~~~~~~~~~~~~~~~~~~~~ + +... is removed. diff --git a/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png b/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png index d6e6004a1732e7f6c449ce3ce7cc87b70743acc7..f0d5023008cabd1296c3cbd30447476c7608cb0d 100644 GIT binary patch literal 23386 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%0ADJ)ar9_c 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 z zW=zOgm9uO6`<;ct?mQ_b5;u!!fAD_l5pmjBR$VC4WzfMu68|U-7cP?JXB_`Iu>bN@ z*4ETEOOT@>d!nn*S&p93o!Ys#Jc+7LAD3Q=`4u~^-@{a@^4PF-{L0?ZcIQ(^Jdz8s-wn)d@w7R$pXFaH zQbkcwGw~^Mw78@1YI|ti^4l!kN6M#cpmKa|yB_}!ZNNOw-DaPPzaQ%KM7?0oYbuWz zkhHsbLKTyW9v4YTL<2rOtypLsIa`8fcf7~mo1zv6inqG#L1tU^C(X|T>)A-> zxDV;%mjfa8&nX67Pi5kv6(N{Ip!f||LP}!f$mp)DR0%Tl+LK88@NwgZeD6@s6BnG+ zoxO8yw_Z&iwvE!M&a`&LQCGVNjtp#*(&pI(yis>CTH$o;{#N{ah2BNZ#VI$*rL6S+ zGl{vSKANCUOg|Y0y)ADDYSMb{ESTFDJVB7(`C3fHe|~U$VF)@F4baZf))=znTPW|r zLPQ3y8yn|Gw8R$`ih35`T;=4uM!~upDTB3(yO;I@4_EgNl&t}riv$K4>sF7CNy&aP zj)UyD;!x?Zr9a+$2xxWcT;C@a?u z996!fOhmP!*L5hKDR%d(^`QQ(FG6%4qa#FebaK_O^)hIXC1@8yQi5;z^_FPO66ki) z{%mRJTBn!@pf*aH6q4-dOoZ zA?-&n{ikM+Qu1_u^8a*l#7}+HRXCez{vJyz#UQEv$5#@|#DhF)Z+L@zTOX1qIU@8- z-eUUH7t^ay@KH%vCbxI9*2@r$$K`6w-g~&W-WpXgx!93+3-*|v)*b(>Ub64a2s}fn zdW;us8{RK_l5;NbUE|X)C&(sf>|I`&BSp$$-7k$=yQr+Dy*4f}YLo9&lFL8Y`8Iv{ zYQ61+e%ELBUq<;Cil84w#zX<$+Iel>*U_b8yeWeYr{=gmj%m#(k7|46FK0_ayz$ub zM8w5Q@lu?Y7{Pg(VsFGZv1>#g(RYl9Ce8j)uhREZ%=lKA)Vx7IN>QHC?>^W^S>GTj zcbq)Cw<_!-2XU|F?f9%^k>K2+mws}kBk3XDsvKRu(Cw7_CiCbE|4gt&=!Z;rb3`B2 z->4k{8^BEAgjE(Xm#RpOC7Z*nGw%~lsq zFvuSnp}U%G62qp@l%w;nwyLjz-3}$ViM)v7ZSSku`~g>x0`}NewhT)^Afdq|7c5V&h_F$YMO( z9(`Exdu0@llnM7^>LF2f&xC8S+4N{&0`+gQQ~AWYvT5A71d<+aJPqDG-xRa8zmwZ=-{eFG$WAed1-p&uTJgck#oPlDx zQPj7wpcL1kQrygErsBaQB{k|Wx+!Ewd8;H(E5zAp9@Et|xZG1g0Z0F#%9k$_AFS6)h1vND zAyrHFPuwP7%hNWpa9&hnzIJWbb+)7K<&`?nxOH_!zw(=Vj}<$woHJa_E0wu#s1~1a zsnnEcty@k?k+8t<)`&H~K%>>j=4@lZ%He8Q8YL|U=5!km-AL2P5njTzJMGOLtKxj> zYsX#&zu3nPSN-n1@~u6_OnyVcbLb|T>z|kBCp>!9%T2~K0$?)B-i!{ZulHjVmsuTZ z2$8DwPB*_QrW24SJVNfc8-MkRm+q)1>$kJa3vMHybba&fjwgS;$KcY&)c3?_Prl-Q z;P6rV(l`CT2kE=~=3(i{qJda=w7pG>eSU764uhLEdkm6{uJacu6sdS{CH5N%iZBYt zCfAMEA-x{_+CP9X_+@%0@=W6CvZN=PB1-pg-FMFUExgi)ud*EVt^3KT`DFr^4XFwY|EXPs5Ci^st@sF<*h8%jtBG<) z$9nxp46Fw7)q&!JQja!DpxNhM*3SNFyp3J!hjqJ}$%nXwg#PGc?bg^x_0TNj*!ozw z)M}*4ZfKUzk)nxPmtTX)D2~ak(?WOb&|;F_yu74Ycz?KZb%Dt>lAa=Jwr#MAhMF&Z zZBdnDtm^^=^+S~ga-J81j;@PpE9KeQb?2W{>Oq;%-p%WfmJ+#jtFhDH{jy`Ewsu%2 z7l$IY=`EW97RppHcWj+%4vDDo`o^w}NCqQ)DHdaN3O}P@3Z0U8xFncj;$aeYKiLYk zwxcAsMk`E@Jqwx9CLUyGiNeqE$hA8O`VNk*YmT*k#|e-rb5rF8nHCK(C#0l!99Mf7 zMF&Y^K>Mlv4NuQ4YrDuwm#~_SR>iBN_IcWY$YZ=bWs+goht(5@7Ic4VD$|d3C1vFAh}?76{GQ&=otHf6ZV0bJ3k$SJw}h zgqX9Emx?<$^|>wOUDXjZ^eQ$jVKO7(3`9q3&*q{zTNip*63z?Sbw04Gx*()}@6Op= z3&-C%7rhxJl22Znw)rLr6LH)9&Khz|VNyHZH!r*vej$*IDoiYr32$e$^YFD6$yKeF z+W9p^Mx+d9!n6q;CIU2Qh=c!cZKk?K1*2K_a~EtBo}hikSSYzhIN8E!OmeSE8( za?WhsXx*_saEMD8Zb@|Yiw%W#y5~Ah!IO;s_h#SEq*?d*w;j};ob}_sPK!_6KHPQi zcehce{@xp6Ywb7J>uOK9yjMr{1Ezi?H6Armay5vx`1%epXGN7*H_rUNdDDoZeQBVs zC0c5+mqk_5^YRW=GGBecmosr7BT^{OCron~2n#=19fJ6g<+fTq6p_ZGLyob$Wm!n^ z`GN;R`N91D6PJkE<1>yJl7CfgwyJEC@Z~|r!DF78@;a%eW|43g^wAU&N)NK#vfvv^ zI-5>U@B5s{Z|28syOaxN9p_xw5{2($ck|ScH|Kry_4#{;Sf9>;>cz@%qkqz5^JZzL z`%?;j^G-@z_8hdaQzr9LEZbz>{YU@$j>z84Ti8T=r~>Ds#s&9|6b9MlpEwC(d7DO`xWr=nP_DMY6u#cW{#FTd17QIj)&K+{o%pOPh47g{XV>W%1fPnpDpKC`aDi* zEGGXR8j+eU|BCcM{j9q6fD4swYDSVNhZ!u z`tbPGFBp>zV_L{h$B<%3c79iAzr)ILB|;V}LN>$Wlef1iDGjuKQYa7bx7}uzG3A0E zZ&1us*j+y za}+z{n0Ame(ceKkWZ}>Uxz9uewcS=G5b+X;Q5XvS3L+jmDjjA`fHD}}4JrY}qpKho z@T1yIdZ_ttTLXs`>E=pqjrYm5l@zP8@~4ua2|WnDAYUSNaHj0{Z&heaHWq$%DiTJo zgNXS*SC4ZH(6?za{qK6NJ2%i-(=bu_k)JkYv+$F^tW__dvsS``S;yUgSwTxN%z7H7 zcr9BnYvpqE1^MryL%C0fQlUdpWtZg_T68k~XDBEl%892#(SCJRc64a_>0MD5gAO)? zEnVgGyd-)a%@bv2P)S}9)k9l6;ri&Wrx&3rD9!1?BlO^DMBu=KRr^VVZr?Pzs*PxT zgO7%gkSuxhPH|Bse4Kq&CGzs}zR>Ki#4cd=umvBq187*c>itMio_xY%6pG%S<5C80 z9sH03DD#r+|49TE4?_281B83k%jXao#Qw<>KJ*^YC6e{Q5u zF_D#3hB>Cj#o-K9;{Eki5#pU0i&b>SYH#QL54Vf2uh z16@7}@y;qN10~`Iwcg|Ta&lBmm>KCZ{deSBNPLj4>dL*u7tHUY<+y@#+30Y<_Q~Z_0uB zvOMw4vvK6;)6O@*)9!VSn&%=X=I-B(jxpHpahI8|xxL~Jc{`f(h)D7hJ8pl;ovnuD z5t6Igu=W<0*Lu|J8pC|6#qD>l@|qFbk7E|N3E1!R+fNf3SQD9;&n`2BN8lW6W0`ee z`bw|EnVOMOyW@S&PDe*9t3F)k6%*tgKUBtKWE#gg#&Ag*>{rU3xRv^d zI~$ma#|AJX**T8#WE7Df`f(2<%?x{W$tlMma>%){#NgU2U^D?#{geDS2?NxBMZ zhb&&IkqGrB+1l=Cc~pWAai#a6b9dY9B2m>5KXm!lnWtjhyLVf^uST5LTdb=}v?~Lz zt0)uS3E_2khaZT6F;T*PccVk$b0J2}iJr~w#!4lQ-R94VlFL{~Rh6&0{_=%ri4Fc2}{kSxt>DWL^e#B78p^J4f~V;h)$` z>Fw!X{0bjr9v{A9efU@#t*8WV@RzQxhnkHzB7gthZsA;(@D)u?ZU{BFrKuSr>V@;f z{_@eabbd7Q%LMYTBKXvd8^IiCRf>fpq?HfvMGGbx$dwf!I-N?xEF2^dodi%XmdP|d zc0}4x;g9sMBYtU5sUcS>DvxbhcafzK-X9kAOT|ln<8tHUeEECn!I_euM8?{YjsB5D z#5FtPu|Xo_UWhuQ&ez!XOKbTHQC}nQGIES5O6yo-Pw#H(hq31KoA%ns@HY33&LGw$ zx=W}qHlQL@gMWez{m7RSjZ-iFNUMlZ)M$>d=*=4~ss$g+FBa zH3u;em227k_TE^>6`QZ3wKX01TX=Wl%3brPJ=Pr7F_9y$RXeA@UpPmG|8lP=RbzQr zd$5+qz(@A5GNvIIGORq$%84V591N!9xSH%0$<#Ddn0){$hc`-9LId zcWMGFK0WO&y{WHj@2O^F#j+!}DmO7H^IPS&^eCMFu{Lz-6VBLHu)naahe0af`^UFsr3hgnA$zTOr z_VezMxzDUqW-Svf=gKl!KZ%uL3gZb6DV9H{OyRP(n#vZdwnSy%A-^XD(SvEuaevCz z=WxyF6aA{6?M|FeRdbm&vr@2H5G4^+!5{2F1Y8u*cB(nL1N=JWo z`qF-8*}Kk-8;#CxI{dM;HnmCW85NFCs|QID%|BOd%FA%{xb-abGRklEsWhUnnZ9B4Ww36q z;s6tw;uode6RP_-Ud-zU&$&TEnFiu+{m+g&7hZ)# z**}=Px#qmyA)s#Gqo4brr;wv}SBngf?unhDI-dH+xf)CmANRHo@{tB|Cl&WIa5kUF z2YFCmj{CaDB0hg*lVEmzW9HSkdLx++@k#yI8Xh9x{l>3tmuIqAU6RuwI5GS*Ft^4I z>>x99qvev$41>>EeHd=$2Idtk_HzsRycMk|nGcLA_0(C~7OhW(BEho-TX;k6qiHaG zX|T@WO@Y$Ry2cJ1&Rgiu-XOl%1o!z<5d>6Zj9^B2(D~6KgH82^iTj4bes%9`)F)U-!R+3DDYlBaLqsQ=-=Cv4bUf%+oXDJ zteUD^=6DjR*M}CC9x9)OooG&TXRxK;WQc8>YUwpwOv$}w)!$-kFSg@a$zge+o6QHJ`ho-$f2?b<;Ax;qBX?P_g`qhfjy@S4M$G9X1@93B`)N%U-v80^#m3_s*I>;C{THlC{n{XYI4sd)~eG^FHryiWw9q5DT=piRImG0y^ZN zl?vnkja4D6tdFW$3OjtZSx*p`WAeOhKiQ9%0p)=Vn<9mim&tPkjj%LoWcdO2@i4E} z_&&kRu#i%R;k|%axx^7w#)rqb+n)?;%m;Gb6s0He(#v-ynd(R*Cgbla)6xWI_GjsX zxE%ScB3J|zpvZN+inhrnq_zFL~rt6f_#(zHcKSF%By<`L4kfY^xdry$+`XuHc zVHguG*4_B84&w><`R8vw4i&tmkA__Q>(W{|Apyxrna0_`ofoG|K-$gCz!b}E2Ax_e zTVj7zr14?M8YC>GJCiVwYpW==LytfFTzXvttM-T5iP_Psel1Wcc*pU@0DXIO18cL! zX|2P#>j#?oMMNw!g#2~wJX(D`z@Ii|H`WI)mI$J?4CZVUHfwVRjxRd*uNwlrw|J$l zcI;U5Ubxe}z8eomtwFd%CX@MZ@1)?OP^>fZHTuh3*GEo6AeMd#qI<*V6UTLhB=$BK z+9gD}A>hKh^{u4G>AIReYGBEL)dmYxzws;!_2Q)0=tv;6pO$-G8Ji#o9vS}9S^_(3;`R^s>{5yJmjBlk% zwm_R?iAarPu4@|@h?>7U^^r+0pTYer59+BsZB%Mdm7btGM|w0N=`oGL(LkP99*vIS zCbiu0;tcr3di6DX!1BxRy}4^sYfiwtnpt3rHlRlQ(OuXS3w3ORPOW01mxw~P3IeUv zRi*@CCN3^l^WR+$r?fB%xQXRV;~km`PVzd0?XVux5NbvO?psGP17=TJoQ(^j6Mn1_ z*Y3Mh0gX;N7AKCesf|kH;Dx4$F##SzU4T)92}_w#)#2vRsqj#Zkqs(pUQX6OR|P|SM9oS*S@-AvjX3nA!*p z+30S~)^V;wONwbia&w(0Y@JRXfpW9)@jFi}yIS5v83D*%4YpfTf+2FJF{#0*W7}T?dF-aco#0opW z3LT)fM)qAN8u3jL7|Fs_4l@HXK!wJwqL4Nb*8V<_hzNG%@{Exq*#|V+kKINfS|bmR zzW1A0el(=#QPLIziR9Hrbx^@ui_a%$}0cWeOHb`+XAzPek3*S=DFU#-03pjWI z_#yYelCHnPMOGt-=}Mlt+&bxE0q1taG6#xst9bC#&eMQl_ED>bDO`oAvU_&v$i}nh zIMd*rf!eo0UXBw@O&y+IhJB1cVDF;-D7{G_R=e(o%XxW54IMN#uYT~V?~p(UOtbTR z!r)_c^&V-;6=6q3L=~Tuczos2|0V;Dib|0PCAVZ~N%%J8iVR(~^Y42F%(aIsnTa=7 zE2n+s$#Wd^6JVBX4M)_uCnn}U$L?=ipUr2lrlDh}m+l8yD}NU(Z`8)knBHJt5>tf3 zTTVR~C4tD*eg4cZ#np`|a!(3*f83^Ndn!6)3tIR|kMlQ02_02uWNZ^U z`=ql+;8PR$ph0cNtrzCdPC`REl!W0Kp_uJn)Yxl6i!>$zi?%;#hq|2R%I{ESe6~a<8KbWoyVdA8Jx-_&yhB= zIq%8l#RjzD|LBS(+x50xt*Wlz5Fst0%r3-z8bF3D6a;_4eKlp|&F z5>(4O!_6cI0TQ}qun>mWb6cScoC<}@)ym2Nehs&(yI*h+xcnpTv5ZwEV+Q=VLnT^c zjff)X+@IuX+DflWvc1*dbAIouo5Te$*wT3iNH5fYpkF0D>Te_ixApkXzp5doJyy_jNsjKDh;c9g|Lq04z}o3*uwa5odj zUTiAj#Acm6v`t-+jhk_w5{C+0jLjWrPr^xq!h<0>AyI&+rIpdLuM;-oojZ`r1pHUd z{P*14sw8KzEd8LzHwqQm+w8sT$IFgK3BQew;p`rVQdTjB#Z;1MPACccD<}}OISMBH z1`3@Hf1C~G#tGHQyPhbsu%VPKFhVLd7kaosaWb@y_4 zpN}0iQcBlk1{=q$9C#TP^HbW^=4tzcr=PxAZgTZznvuQ6Ichz#V9EAPFaY6M?{spN zS-GZt_xgl~on0I4k8|h;ptpBy*hR(nTCF>7xcqwTwVcTa)nL_m{h0WcVYuWrxiQ$3 zxikL~sby}KB~bz{^g!Uf3>VPAL{L|s#W%Vc?3(>8QGc#)juF3u7s_?RUP`$>idj1n zo`L^CK%>NbsSTW1?B=MqOw7r+(4e?D=VZHD_dJch35Np}jzChO_1M!i8OuQmWo}}t zK*=;aHXD5@#lYvSdC^ojTLxI*aXODAw0W8fYCVW&ApMt&4rqcOUyK4W9**9Z04Alq zEmq1@Umy_f_+O>^?~8uWk;&hg8}e3Gsfv&3Uf0;zQ!%$#^`fGa!QbM7p0MLE5OmTi zqCf=%ZNQHYdwT&i`;Hb{YO(gLVlusl)%yt0q78a?(7YO2%J+b{%5r&slFuKQu}`2M zfnv%DK#TxDgpn^w=ja#dJOluB2HiB0&le&!vfTbcID>4H9ezEH0h#TZfO7jzAl~}W zMIZs_;9oY{J0j=`KVaWI9c6b0ASSG`Ud$2**aOKIQvbN&3N^HvSm|TO3>c??_zmF3 zopIagN&EqTw3qm)m?4#a`ABgSe*gehzPsBm4UGFDjq+)Xy7+1wzQ%K%q-eXR-Hp1c z;=Ge^NUFY2BKza{ZdlNR3cKF#Q1DDa9C!$rn%L9gjrR24|Kr5}#|ZU3U85d+Cv*D! RQh=I=7#W%vR9tX;@NW~Cpx*!h diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 1ecb4b9a1df7..3e41712ba530 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -7,8 +7,6 @@ import matplotlib.colors as mcolors import matplotlib.widgets as widgets import matplotlib.pyplot as plt -from matplotlib.patches import Rectangle -from matplotlib.lines import Line2D from matplotlib.testing.decorators import check_figures_equal, image_comparison from matplotlib.testing.widgets import (click_and_drag, do_event, get_ax, mock_event, noop) @@ -1055,16 +1053,10 @@ def test_check_radio_buttons_image(): rax1 = fig.add_axes((0.05, 0.7, 0.2, 0.15)) rb1 = widgets.RadioButtons(rax1, ('Radio 1', 'Radio 2', 'Radio 3')) - with pytest.warns(DeprecationWarning, - match='The circles attribute was deprecated'): - rb1.circles # Trigger the old-style elliptic radiobuttons. rax2 = fig.add_axes((0.05, 0.5, 0.2, 0.15)) cb1 = widgets.CheckButtons(rax2, ('Check 1', 'Check 2', 'Check 3'), (False, True, True)) - with pytest.warns(DeprecationWarning, - match='The rectangles attribute was deprecated'): - cb1.rectangles # Trigger old-style Rectangle check boxes rax3 = fig.add_axes((0.05, 0.3, 0.2, 0.15)) rb3 = widgets.RadioButtons( @@ -1164,57 +1156,6 @@ def test_check_button_props(fig_test, fig_ref): cb.set_check_props({**check_props, 's': (24 / 2)**2}) -@check_figures_equal(extensions=["png"]) -def test_check_buttons_rectangles(fig_test, fig_ref): - # Test should be removed once .rectangles is removed - cb = widgets.CheckButtons(fig_test.subplots(), ["", ""], - [False, False]) - with pytest.warns(DeprecationWarning, - match='The rectangles attribute was deprecated'): - cb.rectangles - ax = fig_ref.add_subplot(xticks=[], yticks=[]) - ys = [2/3, 1/3] - dy = 1/3 - w, h = dy / 2, dy / 2 - rectangles = [ - Rectangle(xy=(0.05, ys[i] - h / 2), width=w, height=h, - edgecolor="black", - facecolor="none", - transform=ax.transAxes - ) - for i, y in enumerate(ys) - ] - for rectangle in rectangles: - ax.add_patch(rectangle) - - -@check_figures_equal(extensions=["png"]) -def test_check_buttons_lines(fig_test, fig_ref): - # Test should be removed once .lines is removed - cb = widgets.CheckButtons(fig_test.subplots(), ["", ""], [True, True]) - with pytest.warns(DeprecationWarning, - match='The lines attribute was deprecated'): - cb.lines - for rectangle in cb._rectangles: - rectangle.set_visible(False) - ax = fig_ref.add_subplot(xticks=[], yticks=[]) - ys = [2/3, 1/3] - dy = 1/3 - w, h = dy / 2, dy / 2 - lineparams = {'color': 'k', 'linewidth': 1.25, - 'transform': ax.transAxes, - 'solid_capstyle': 'butt'} - for i, y in enumerate(ys): - x, y = 0.05, y - h / 2 - l1 = Line2D([x, x + w], [y + h, y], **lineparams) - l2 = Line2D([x, x + w], [y, y + h], **lineparams) - - l1.set_visible(True) - l2.set_visible(True) - ax.add_line(l1) - ax.add_line(l2) - - def test_slider_slidermin_slidermax_invalid(): fig, ax = plt.subplots() # test min/max with floats diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 0a31a9dd2529..f24be7904690 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -21,7 +21,7 @@ from . import (_api, _docstring, backend_tools, cbook, collections, colors, text as mtext, ticker, transforms) from .lines import Line2D -from .patches import Circle, Rectangle, Ellipse, Polygon +from .patches import Rectangle, Ellipse, Polygon from .transforms import TransformedPatchPath, Affine2D @@ -355,11 +355,10 @@ class Slider(SliderBase): Slider value. """ - @_api.make_keyword_only("3.7", name="valinit") - def __init__(self, ax, label, valmin, valmax, valinit=0.5, valfmt=None, + def __init__(self, ax, label, valmin, valmax, *, valinit=0.5, valfmt=None, closedmin=True, closedmax=True, slidermin=None, slidermax=None, dragging=True, valstep=None, - orientation='horizontal', *, initcolor='r', + orientation='horizontal', initcolor='r', track_color='lightgrey', handle_style=None, **kwargs): """ Parameters @@ -627,13 +626,13 @@ class RangeSlider(SliderBase): Slider value. """ - @_api.make_keyword_only("3.7", name="valinit") def __init__( self, ax, label, valmin, valmax, + *, valinit=None, valfmt=None, closedmin=True, @@ -1115,32 +1114,20 @@ def _clear(self, event): return self._background = self.canvas.copy_from_bbox(self.ax.bbox) self.ax.draw_artist(self._checks) - if hasattr(self, '_lines'): - for l1, l2 in self._lines: - self.ax.draw_artist(l1) - self.ax.draw_artist(l2) def _clicked(self, event): if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]: return pclicked = self.ax.transAxes.inverted().transform((event.x, event.y)) distances = {} - if hasattr(self, "_rectangles"): - for i, (p, t) in enumerate(zip(self._rectangles, self.labels)): - x0, y0 = p.get_xy() - if (t.get_window_extent().contains(event.x, event.y) - or (x0 <= pclicked[0] <= x0 + p.get_width() - and y0 <= pclicked[1] <= y0 + p.get_height())): - distances[i] = np.linalg.norm(pclicked - p.get_center()) - else: - _, frame_inds = self._frames.contains(event) - coords = self._frames.get_offset_transform().transform( - self._frames.get_offsets() - ) - for i, t in enumerate(self.labels): - if (i in frame_inds["ind"] - or t.get_window_extent().contains(event.x, event.y)): - distances[i] = np.linalg.norm(pclicked - coords[i]) + _, frame_inds = self._frames.contains(event) + coords = self._frames.get_offset_transform().transform( + self._frames.get_offsets() + ) + for i, t in enumerate(self.labels): + if (i in frame_inds["ind"] + or t.get_window_extent().contains(event.x, event.y)): + distances[i] = np.linalg.norm(pclicked - coords[i]) if len(distances) > 0: closest = min(distances, key=distances.get) self.set_active(closest) @@ -1227,20 +1214,11 @@ def set_active(self, index): ) self._checks.set_facecolor(facecolors) - if hasattr(self, "_lines"): - l1, l2 = self._lines[index] - l1.set_visible(not l1.get_visible()) - l2.set_visible(not l2.get_visible()) - if self.drawon: if self._useblit: if self._background is not None: self.canvas.restore_region(self._background) self.ax.draw_artist(self._checks) - if hasattr(self, "_lines"): - for l1, l2 in self._lines: - self.ax.draw_artist(l1) - self.ax.draw_artist(l2) self.canvas.blit(self.ax.bbox) else: self.canvas.draw() @@ -1283,60 +1261,6 @@ def disconnect(self, cid): """Remove the observer with connection id *cid*.""" self._observers.disconnect(cid) - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def rectangles(self): - if not hasattr(self, "_rectangles"): - ys = np.linspace(1, 0, len(self.labels)+2)[1:-1] - dy = 1. / (len(self.labels) + 1) - w, h = dy / 2, dy / 2 - rectangles = self._rectangles = [ - Rectangle(xy=(0.05, ys[i] - h / 2), width=w, height=h, - edgecolor="black", - facecolor="none", - transform=self.ax.transAxes - ) - for i, y in enumerate(ys) - ] - self._frames.set_visible(False) - for rectangle in rectangles: - self.ax.add_patch(rectangle) - if not hasattr(self, "_lines"): - with _api.suppress_matplotlib_deprecation_warning(): - _ = self.lines - return self._rectangles - - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def lines(self): - if not hasattr(self, "_lines"): - ys = np.linspace(1, 0, len(self.labels)+2)[1:-1] - self._checks.set_visible(False) - dy = 1. / (len(self.labels) + 1) - w, h = dy / 2, dy / 2 - self._lines = [] - current_status = self.get_status() - lineparams = {'color': 'k', 'linewidth': 1.25, - 'transform': self.ax.transAxes, - 'solid_capstyle': 'butt', - 'animated': self._useblit} - for i, y in enumerate(ys): - x, y = 0.05, y - h / 2 - l1 = Line2D([x, x + w], [y + h, y], **lineparams) - l2 = Line2D([x, x + w], [y, y + h], **lineparams) - - l1.set_visible(current_status[i]) - l2.set_visible(current_status[i]) - self._lines.append((l1, l2)) - self.ax.add_line(l1) - self.ax.add_line(l2) - if not hasattr(self, "_rectangles"): - with _api.suppress_matplotlib_deprecation_warning(): - _ = self.rectangles - return self._lines - class TextBox(AxesWidget): """ @@ -1361,8 +1285,7 @@ class TextBox(AxesWidget): The color of the text box when hovering. """ - @_api.make_keyword_only("3.7", name="color") - def __init__(self, ax, label, initial='', + def __init__(self, ax, label, initial='', *, color='.95', hovercolor='1', label_pad=.01, textalignment="left"): """ @@ -1513,8 +1436,7 @@ def set_val(self, val): self._observers.process('change', self.text) self._observers.process('submit', self.text) - @_api.delete_parameter("3.7", "x") - def begin_typing(self, x=None): + def begin_typing(self): self.capturekeystrokes = True # Disable keypress shortcuts, which may otherwise cause the figure to # be saved, closed, etc., until the user stops typing. The way to @@ -1730,9 +1652,6 @@ def _clear(self, event): return self._background = self.canvas.copy_from_bbox(self.ax.bbox) self.ax.draw_artist(self._buttons) - if hasattr(self, "_circles"): - for circle in self._circles: - self.ax.draw_artist(circle) def _clicked(self, event): if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]: @@ -1742,16 +1661,10 @@ def _clicked(self, event): coords = self._buttons.get_offset_transform().transform( self._buttons.get_offsets()) distances = {} - if hasattr(self, "_circles"): # Remove once circles is removed. - for i, (p, t) in enumerate(zip(self._circles, self.labels)): - if (t.get_window_extent().contains(event.x, event.y) - or np.linalg.norm(pclicked - p.center) < p.radius): - distances[i] = np.linalg.norm(pclicked - p.center) - else: - for i, t in enumerate(self.labels): - if (i in inds["ind"] - or t.get_window_extent().contains(event.x, event.y)): - distances[i] = np.linalg.norm(pclicked - coords[i]) + for i, t in enumerate(self.labels): + if (i in inds["ind"] + or t.get_window_extent().contains(event.x, event.y)): + distances[i] = np.linalg.norm(pclicked - coords[i]) if len(distances) > 0: closest = min(distances, key=distances.get) self.set_active(closest) @@ -1824,19 +1737,12 @@ def set_active(self, index): button_facecolors[:] = colors.to_rgba("none") button_facecolors[index] = colors.to_rgba(self._active_colors[index]) self._buttons.set_facecolor(button_facecolors) - if hasattr(self, "_circles"): # Remove once circles is removed. - for i, p in enumerate(self._circles): - p.set_facecolor(self.activecolor if i == index else "none") - if self.drawon and self._useblit: - self.ax.draw_artist(p) + if self.drawon: if self._useblit: if self._background is not None: self.canvas.restore_region(self._background) self.ax.draw_artist(self._buttons) - if hasattr(self, "_circles"): - for p in self._circles: - self.ax.draw_artist(p) self.canvas.blit(self.ax.bbox) else: self.canvas.draw() @@ -1856,23 +1762,6 @@ def disconnect(self, cid): """Remove the observer with connection id *cid*.""" self._observers.disconnect(cid) - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def circles(self): - if not hasattr(self, "_circles"): - radius = min(.5 / (len(self.labels) + 1) - .01, .05) - circles = self._circles = [ - Circle(xy=self._buttons.get_offsets()[i], edgecolor="black", - facecolor=self._buttons.get_facecolor()[i], - radius=radius, transform=self.ax.transAxes, - animated=self._useblit) - for i in range(len(self.labels))] - self._buttons.set_visible(False) - for circle in circles: - self.ax.add_patch(circle) - return self._circles - class SubplotTool(Widget): """ @@ -1974,8 +1863,7 @@ class Cursor(AxesWidget): -------- See :doc:`/gallery/widgets/cursor`. """ - @_api.make_keyword_only("3.7", "horizOn") - def __init__(self, ax, horizOn=True, vertOn=True, useblit=False, + def __init__(self, ax, *, horizOn=True, vertOn=True, useblit=False, **lineprops): super().__init__(ax) @@ -2109,8 +1997,6 @@ def __init__(self, canvas, axes, *, useblit=True, horizOn=False, vertOn=True, self.connect() - needclear = _api.deprecated("3.7")(lambda self: False) - def connect(self): """Connect events.""" for canvas, info in self._canvas_infos.items(): @@ -2613,8 +2499,7 @@ class SpanSelector(_SelectorWidget): See also: :doc:`/gallery/widgets/span_selector` """ - @_api.make_keyword_only("3.7", name="minspan") - def __init__(self, ax, onselect, direction, minspan=0, useblit=False, + def __init__(self, ax, onselect, direction, *, minspan=0, useblit=False, props=None, onmove_callback=None, interactive=False, button=None, handle_props=None, grab_range=10, state_modifier_keys=None, drag_from_anywhere=False, @@ -2957,8 +2842,7 @@ class ToolLineHandles: for details. """ - @_api.make_keyword_only("3.7", "line_props") - def __init__(self, ax, positions, direction, line_props=None, + def __init__(self, ax, positions, direction, *, line_props=None, useblit=True): self.ax = ax @@ -3068,8 +2952,7 @@ class ToolHandles: for details. """ - @_api.make_keyword_only("3.7", "marker") - def __init__(self, ax, x, y, marker='o', marker_props=None, useblit=True): + def __init__(self, ax, x, y, *, marker='o', marker_props=None, useblit=True): self.ax = ax props = {'marker': marker, 'markersize': 7, 'markerfacecolor': 'w', 'linestyle': 'none', 'alpha': 0.5, 'visible': False, @@ -3771,8 +3654,7 @@ def onselect(verts): which corresponds to all buttons. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, onselect, useblit=True, props=None, button=None): + def __init__(self, ax, onselect, *, useblit=True, props=None, button=None): super().__init__(ax, onselect, useblit=useblit, button=button) self.verts = None props = { @@ -3882,9 +3764,8 @@ class PolygonSelector(_SelectorWidget): point. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, onselect, useblit=False, - props=None, handle_props=None, grab_range=10, *, + def __init__(self, ax, onselect, *, useblit=False, + props=None, handle_props=None, grab_range=10, draw_bounding_box=False, box_handle_props=None, box_props=None): # The state modifiers 'move', 'square', and 'center' are expected by @@ -4199,8 +4080,7 @@ class Lasso(AxesWidget): for details. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, xy, callback, useblit=True): + def __init__(self, ax, xy, callback, *, useblit=True): super().__init__(ax) self.useblit = useblit and self.canvas.supports_blit diff --git a/lib/matplotlib/widgets.pyi b/lib/matplotlib/widgets.pyi index 00c2d0da8a7e..ca1e5a71a288 100644 --- a/lib/matplotlib/widgets.pyi +++ b/lib/matplotlib/widgets.pyi @@ -164,10 +164,6 @@ class CheckButtons(AxesWidget): def get_status(self) -> list[bool]: ... def on_clicked(self, func: Callable[[str], Any]) -> int: ... def disconnect(self, cid: int) -> None: ... - @property - def lines(self) -> list[tuple[Line2D, Line2D]]: ... - @property - def rectangles(self) -> list[Rectangle]: ... class TextBox(AxesWidget): label: Text @@ -191,7 +187,7 @@ class TextBox(AxesWidget): @property def text(self) -> str: ... def set_val(self, val: str) -> None: ... - def begin_typing(self, x = ...) -> None: ... + def begin_typing(self) -> None: ... def stop_typing(self) -> None: ... def on_text_change(self, func: Callable[[str], Any]) -> int: ... def on_submit(self, func: Callable[[str], Any]) -> int: ... @@ -217,8 +213,6 @@ class RadioButtons(AxesWidget): def set_active(self, index: int) -> None: ... def on_clicked(self, func: Callable[[str], Any]) -> int: ... def disconnect(self, cid: int) -> None: ... - @property - def circles(self) -> list[Circle]: ... class SubplotTool(Widget): figure: Figure @@ -253,7 +247,6 @@ class MultiCursor(Widget): vertOn: bool visible: bool useblit: bool - needclear: bool vlines: list[Line2D] hlines: list[Line2D] def __init__( pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy