From 4cf28c3b9961afe25964f165032ea52e17706a11 Mon Sep 17 00:00:00 2001 From: Irony <892768447@qq.com> Date: Wed, 5 Apr 2017 16:07:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 验证码控件/Jokerman.ttf | Bin 0 -> 69752 bytes 验证码控件/README.md | 11 +++++ 验证码控件/ScreenShot/1.png | Bin 0 -> 11060 bytes 验证码控件/WidgetCode.py | 94 ++++++++++++++++++++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 验证码控件/Jokerman.ttf create mode 100644 验证码控件/README.md create mode 100644 验证码控件/ScreenShot/1.png create mode 100644 验证码控件/WidgetCode.py diff --git a/验证码控件/Jokerman.ttf b/验证码控件/Jokerman.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3c41249e1c82d4cc9dde05b1922c1de8622b5a84 GIT binary patch literal 69752 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 Dy(0Xo literal 0 HcmV?d00001 diff --git a/验证码控件/README.md b/验证码控件/README.md new file mode 100644 index 0000000..e520985 --- /dev/null +++ b/验证码控件/README.md @@ -0,0 +1,11 @@ +# 验证码控件 +
+ +### [Python3.4.4 or Python3.5][PyQt5] + +# 截图 + + +# 说明 +参考网上一些代码,都是采用paintEvent绘制,这里采用QLabel显示html结合字体来显示文字
+然后在paintEvent中绘制噪点和线条 \ No newline at end of file diff --git a/验证码控件/ScreenShot/1.png b/验证码控件/ScreenShot/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6de1358af438f99e28818876dcdb25cea6842903 GIT binary patch literal 11060 zcmb7qRZv`A&}{-F!5Q2=xVyWB5ZrZ;;O;ho;Laqt6ChZS0S4FL!QI^kcN_fYt9u{* zs{3?bPMtc|d-v(;UfpX&si`Pnppu}zdGiKC@sq5^n>TMsU(Y*`-@hJ5=X@OByrFud zC@ZDqlXaYp0>YD9?8{C6Xta?6pptBSN8>H|Nm5R(Qts@{jUkpSQW6hqS8z0TnA|{f zsM1?qIb$_M)IB%kf692D8c$u`p;IFPkO9)4U}b;OPp*bN#;(3t(a$~H>W+GNdun^` z`N1k0*kzvXua!;HzHG{XtlH`^k)#0iT2D7ZMCk9&S8g=BZuGixUsRcRaY|2luR)3^ z!HhN2Szbo7$c4Y=bGG{Jg0~=eL_2Z+y*7Ukl7e4AFDPFjiyTaql{bxHO=9lhlT3vy z{gx2VupuU8eLfnTJkN+rgB(2GMV?JH6i$V_ViOfhaZX)Ljod|-b!S^!`Cz}Y9(zs7 zPs7JIv-1!f5^}E9z+lFkFp4d!zIAiFl%J}IO4hdJ__#8{yLDqMI{l}jTTsJ_DYa5^ z5-QIzF4y-aW*_*M24^?`W9Z z>&0w@C+}GsMCKG*(bl+mmu`wHh>!85 ziAaBxQztg@-NsRzpN@&_7!L8I(8PC&;>_zLNfa&rJMBzIW1Tzb+=(oW zj7~_x&TM4#@nfDkZr&q~dz+|N@>4g=!BW(>g+>}87DdU!Y`<#nG1t?a`V9zrFQ!Hk zu5s(S^{o7Rtu4BC*u!*XUFoCY4pf}bzdA0hOuSh!$=;h!-1YJUp2KC;WSaVAg`+bO*vS9JJK7BHx)cB*@n*z$0@;#jw^{S01r{DQkYamQ)#;3aORlNj`LniJJ}{`MQat z#!vdzvStH#Pl2EZNV^CPpW-dSB++(S=UvIcHOHnFC}dS;Tqrji$sk&1DOIcqUyy2Z zU@2j<%8jaF>UPrnm29QT%1cMhkI*H|g%XIZYEP2EplC~HCTV0Lkf{%IBac@ev^TGK z>o*X*Rlc0V8ner(7gg*<6-{qVX3`eFkgV~&+{%Y`>e;USLksdxGwNR+^#Brm2lVfg z<91qwdB`fZ)1-(rtjbI+^jfsB#)1TCF!i5lM z5+kNdqY{#&{3i!Dtx-Q`MZZZ*p8$&ntvFHA2h(y&aU^0(bFj!%_rhvPKzfNr*QQ0kJTxkA1v4gR;+H;si=EF@I1@?|3K`~b#DNB1JiMta8bG2N zDB3K!H*I`j62~kvu6)3@sdSbNdaeQV5*Sj(rA*CxXLZZ3Ze^*HesipB7F5>Y5iEyMGB%>D*1_c;KC* z+Dk_Mg!af5f~8}ZTTMrbY*7z;lX;IPH_25DMjCTW*`%#}WxEEGYrGm48q5{#e_U)X z63Lpq@e`O-cS;?U##5-x>U_s0D8Y01zT|uOZN*rNSa8~*JoLjMRjn8P0*?jfeUKqn z>(bI%2i{;Rto{)3eX6>!JmLo`mLzM;z{-9A4|uNY7w{_NY!@329y0xWiv4 z{_}L}+;OFIFx6)YYlMa^&z6Z^v656f4(s#O2g zFoqwmmNszz`{WtQM}8zJI1&zNFck>lza5AN{kQB~$^Vx5e;@bxN@KOw{_T9;0zA-v z+IE{WvpZd?iA_%K=xxH%E-*$qniXWbtFm60x_t?<^f749?TR!sF{SyT&Y^fzqcDBULQEx9a|xSAu-R{Q+Cp2zW`cIx=@ z;}-p94!E1pxLtB>>>+VMZx+_q5!{RhG`p3 z#5jLG0_sM~Du$Y$uGSG9e6$Mr$K!b=6U}uBLz~PR3onnCs>9hLgckkrGj-tEa1>G( zcuV&l_7dVqj(t%&yA+;|C=LH|>R*|%RKuvhLLE=7fLwfz3Q1Vq7kwWe&iC7Ezb2=Q zer}Q(G~;-Tv=`YB20{ND)_~_b>(+;p7L~1&yRYE0AyKX^l-QPECo!&t`|^Ny zVRJeMWlM#X$gK%3m$_(T?Hsq%m4RdjVmhh>IUh1a*LCjwmuE*3Jr_J*Ym4i& z)*hD%4AAEpP2SQCrL#EWG5s=0l%~?0LV2o9`+-ZH==_uObh$nhKtvST7e_jjr&X%a zeDZX8l`GhE{~JKbF5R`c?^y50JTtPEvp)15T~hDm*=97D!BxQ{;PG4m>D{|LrBwDm zbM7^6RqS@;qmDuherY7)JMCu)^MF;Vjy81)Y|@kUR`*@ZgoK1`wE}qzeV*ug zE=P@=IuVSnoy~P$CKH~XIPk$p`fIS%_!4?F>ep7?z^lKHgnQd+3zw1q}~> zp%(53QxdMU$rm)gbei)18USWQ{#BGnV3)N%oUYJY^e;_L6yg+AgR&CpL-*Gc=!lyA z8%{3#Wo+Es++^o&-dLH`_;JpUBG&D+N1I@~gHcRvF{3 zF6Jr>bwe3)d=LbjSMj=_&THa5y}fxRZGJT~mwyo#F*kozQDM{2%Thh4)Gr*EnQd*y zbzyx(Q9X{Yt2lWO<;HPdLSMf0ENu0=W)^?C(loP7;sCB5EcS-Rba7}>|3(OBz*M-) z*fG2R*Y04jlN`YIQ7MTEB=@n*Fd!hnZ9P2X>&DqHQ5Yk{w^iWt@eV|S}*V8r1%DV`#R|YdiU0(1b4rM1OaCYx4|p#}+J&DwXyLAihPb%xa_&Nxubg<8V{} zu`Iq{*Mr*2lZsWcyP7=@&qhUNQ$E9HzHFp!sF&g)S%m6LubmCi@!Q1%B1daq@c}RSBoGNfV_8@lf zdq5|-y}{koEbxp2B|V|mzxbe!_Leo;TvQ=R@UT?;^JB6xEvN3 zn|~6!S|4AtY?5zNmo@7xFy9*Guuo>zK0E8iiurq*N;WLwbp#MINH{wyN-Y2-Mp&&5hPDl%d!JIkKwF6?%MLem1$M+qA7g9tX4ftGua=e@VT2|> z#*SayB%bv*a?jAtx_ek~uOAhW^Yu2XR~emu&akvW)?Mkq1VXB>dvmR25BqDEY^Tn@{2k8<*@m1#PZDHLu+4&wein*CYw#pz8vOuU-A1l`KlIjtDL zmEl7}624f2L671=5$jtTK9P};l3rf*tfI@o>j6}XJ^|(<)zmGiZ=nmyF|3`^zBfS9 zp}=5eNrRnhc)(VmOQA(dA`a5lxkB3bncuhQu)b&|<%{-!n+5CqSTi%T#-AXWD^AOm ze>fv_b-rdN$Z;B`7qnVM#L6q}sf;E>^pxIrIUguNYF_9{Qu{~*`*vjhUuPSRg;`dq zsHonIWC{@4@3!8-GWVv6!9IJZdWk!JQ$_Qxn@H#}=>H6ow|Fbo!8u+30tH-2Aidw` zCgi%|QOA}51R`AAkkvMSw7k2W(~k8ag$~)wPDf6gODeF6B;78D`t( zM4{mRdcvX;VdE=IIbC1DLhb4Dplj2%x&)2+WzMaeguss(N3bZ_O&cj7Ii{xYNnPAR zZ1e_I=80*zIjSL^@9LJ9npZtA_j|l0f=gsBhyh*kJqK8G(Qol!9BhZYeTsrJEuSm7DiInZlya><7 za$Ho*s$nqg1Rn5{&b{$@1_iTiXh-ApugK%BCBZ zzqXX`f_ z!vKTH(s#*LQ9u`a#If_Ue?gCPCq9dlZO_v3n8NW#;o^_$SI%kAo9YfwkBUpD)BNwN zL1}l&5sV9PYZAA#p0v>MubFN?EnSQqlH3bg2g2Y!WWc7$HqTH}d*I+FWt`mQ%?%`^ z)&9=YUE0Jb@XPsUWcWij(a$NW({PwCP)YZ!TYUeQ8N(x2Sv=9$<>gtf>t&a+ZxcEN zJP9qBu@r7i?CzQy6Fgce6$+<82hECq!FjtUh)ZFXuUz zaZU64cdwP+bHM32($y2F+_Uu7nRY)$;L7-2zI3n^uXAmHp88dE18Y7 zyrlFhc;Xqt*w{C=jNe)wje%teZ#v@E@~iCrc>0o0ApY(xH!yuu_S^WxQ)-Xrt%FGvY(=PCk}eAU|z;*S95;!nC{hGBW&@cgA=Cn8rL zq`qv*h;^OLPey5xSP0^O1N|QfTVO{xEQC0+u01c6KOY<}STmtg+D0lpna>%xWjY%N z1BvAcqaI|gbvv31UlN-CP}YD0EFTbJLektZII4j=`cnq&uYNmPfNX4C-ntx~$-^z-X6t{07Vl*BC{u23ape=6-k!h7koQs;o%mR- zjRxfXBIL_UCAlOuOz6KG1aWu2-qxlT6|wL#SA@{%s93ezq&28tE|kP&Q@x;Xpt?CH zIjp1^c?0~*1fsE)NjJ-PO9h503=Cg}?RvdQi#Z{zK+N2r?Tks;;V&O64dX{ENb+SO zFmHU%qL$BZij!06m_N+P>rym(;fpYxQB=|@#GCF6CYNZJrL?N){RrWb2Kkdx2+MoQ zo;(@(D#IKp9c0p(EkhIU2C#Ck3@mk(QbWW3aS#lJM`4`)-vGbCJjw$915 zM;~|m7(7Kvc?aN@d}5nJrf2%s6>Kdo^b8C!LPkR=Y~5}Cx8>y&Y`e^B90#54SkZr* zKzlVV+?Q-V)>>(1J73v#E3yFJ#6}p!XoIiUOFbet!LPw{LUP*uIB-NN(9@UwR7iep zbo6w@Q(bO-sB1EDix8N6TgRY_$7IVcZE<;#c_4tVO`_A8Hf1sXT*sAmW=AM=kV}8) z87%b2SD-wY6||hy z$+H&pxWqkM=c8|rAl6(R3n0+!29HDh>d{%i4%F8i!$P%C1~2f@_f(VJU)_y$ zW$i?dzqMrs+is=AfW!KJq5v+&Pe98H6DuuRODoL%T0_xjt-pNG^9R@b8?n=bNA8Sq zJILeOh*haEg)s1N&2?v?&Rn|4*f*QEU^$3Gkbr`M9U%g8(w}Lx#%h8t z0}#q7)f{+RDfHEHV9gzG&E9)ZI*$Ksqt^jzLPKA{NF#p^8>^Jhn~B&#d~s6fS|53} zD-7bgqYDNX6Z_wkE8Pw4v(zYxq=kDL&*ga(P7<|xax#a(D(L@xV>DE?V$`q+dJ8R3 z57S;})$w&UZVn~g9oyADnrA&k?J&~cI9$K@S3ErM+gZ+F*sgqN(2W^jFozDBxz{Lk z`JwOi5GT)dP^#7B#%P#_fWV?7Ydgz(xw~>+sI&!P(J`fi{&-yQ4yg19;}-0Hrj6{1 zY&u*@vL_&WPCxX|jf;9pxQxE}))BBLd)r)3Eu&C}St^jDPcg>?%Gt24efQufyeO!XsquY$ zAtN~kpljJ3Sm3Qb*}#Cq{kcL*#||cgvVpgbH7&C0dhP(J>U-SAWtYSEPFM2E$CK~K z_1*ub1I|?2S$jI{=jw%>2M4e__T&jBF)6*u65dwq&NrLi>G27YTvIrIB@EOx zr}@Lfl6PqVE-fk`wB(7otx{?`fp`*!BVVt0u7q>6{7W_84syS{u-y3id_4zrjY6rJ z92gcr^$2A-9Ki`K=6Y~2t>G1LS|oQC$h>=pG&C|X z;bS>OFd|x;BDzjy;D*cwbcj+ubqKaS2F*O&@pEB$ov=Q9S`KS*PV&XlFe0@l6nU8! zx4%A^k=q;23A?pXBpAEDK2&dVv*bwnP9+*5aT>TVzFVCA&#xSyxz6vaD(F|k&e!;K1I^% zsuk(bYb;z_8x#y+gwIA-SemGBO@C;3waUm z!8w@_Xck{?JiB3dCKJ=1xP40H75vD?X~ZLY5r2y#-ka!lJWpmGYK_$g_9lZcN`~x2 zZUz&*)`amv4N!A*hUHdC!dIi#NKbY3Jxan|-s7o5)tHIu(gzK$yS}fo&$N?fkHvj{l6!Mq%p=K=VJ8# zhL0H@-EHH(4yg16!)D;eTWg_+X^{O%`v8s^LAzwv(JUcz5tDZN;LsNQxs}1nU2$vU z#hf%eML-ySp!i@o78y3Tg`29w)s=i9x#0I6xtOzNOHEO_{s2+>^7N`8v$O;;Iq&vI zLeS080+E;>?;ovd6SJycEIG6+eVOB*zl92H&@S9n)_}gY;Qbysa1ek%#cl>}T0{%> zcLvR*{hDX)lpfeoI=+~yQH4M9_Y`XH!52AMbjtrGF=={uVm&M}nILAFE1~@k5SjCMFNBv4=y6^LXz5^ z@Ni;|%@sG>Npx)?)^3>N?2#8cIOfJhQb*vLP3)MJY=LP9eIOw)vPBMNtS6#O@djha z$Jr?gy5-wRr9@CgO2^jhZ!^pLPW7FAnAn6XmMaw>15tv{MEm$1hgr@QY8_~-lz@UB zg9B_xQb``Q<)jKaV6F;3fV4Vp-5;RLA{~KHGC>bLa@Qr1W|^)`wlG#6h6>FFjV>Me zgWc;oHq{Sryh6D)Tr_JB)iJ_p61dJjWzATm`^Xuh!m7{o;evg&~$f|e# z#NQh3I`2Oz^sy9B>nXy-MpBowi6iq0pIK(yi38biO94WQIj75XRdYxScQvEB)2I1_ z&6Zglso7w@mbzqCjw*BUz @CG8F)?K_^$RV)q_>%VAh;|+RG7U*Zik@5h_4UPn z$$+(zl_k%MbyU&3+w~*os-Av4Rb*EbZMAw#fsz9OtDdRGC>%z*pd=-nA}&#+Pj-CMKpYEZN@P)#@-4xf?it=wXB3SHpuy3w?@A>?|8Pn8>{o8S>F}G%8Z`tir;{8 zt(ixN6nZ9(7b{RVvs9gI`9?l;U+yck6U0%Q9S!|V_PLh$z-wODm8SnRZs2P5GFh4i z?O&*Sgq7t6`(ft8^L0O68R@PVcm7=e*XcG&h-nVB&J6Tp`nI8N4U9D)u9crYvK|-y z#;}@MZ{h$j8+kiSY+brc{)`m^wE2^rq;%IDK9*B3stMm4`GmwWW?Q6)$9Gk4VC1-B zpnTo~zi-`YPpjY8A>U^6^X?A=QTrkKT0*OiC*)u{ z`#ul6-1cXTdS-6!NWv?g~jF1AK%}+K|TFX3!umAhElID_VJfi=KYxLMhHWhkcw_h1n_Sl(8GRh9y@;Uz&t)nE7xh4B+B_z(z~lFL{-@se-W84&508at*SY?s6*FTU$NOIqelXh<=#=TN17CLk}v_ywZ8tA-(QzZ z9~s69j`MbWHm1I9ei5U`oMHfnn7zk+-;2gH>WyX|%!kEM@oA(bP}b0)VHs_}8ZlNEcnQ;~<;J-Y!;OX_CfO7xcSmm_)!n#mt8YOG+okPO3>S?ddl2?gQCRt)Ek+n8^O zop#&5N$;AarNkoGSl1?w*0wIf1syn$hf*2w1c77Wnhk_~*T~Wb%?m^u zRA-NaxQ^(QEu?t@!Y1q2BES;bFnhfC&*!YP3Kz;a`yv*4>( zny~}8Z(m3Cbox6wKECT|!8*`oh-z*D+v?+$?~VJ{pr~0x790J9gy<7j{%euYJo?FM zyD_5f6vnO>$9sfskP%*+EOMc6rVNXaQ7o?Z&Lc zvNbvvH;b2=mB!lU1*hFV8fBz&2VVA3kD~JteNkc{1y(Rx>tj?r%4vMp9LO4|bi*$Jap{3%c|4)~Q_CFRCx(ErbWAi4iTYTnB- zQbc-ghez@bX{@l(w*>Ou?R{Xc>Xf<5#y*&{=7H#uc83zaCm;qc!Ril`)XgfaRNg(i z8V`ES9uK$Q88Lk>)-?47tl2M)4TAw1OZubyh!3nCpxLP@-0BA^5v!5H_g=0Q-TFC@ zpdHdp5F5HX2AAn!s}MYjufHo|xaT+W?xD>dYV_w43I>kA-F>M_kGrvkNYM{id7ULA z;v9uVelUGTyy$hsVdV=rg!APM;F%fncW`JUjaPWtz)`EJHI>^iU@=;$6KoFK^ZIjc z8Sp@oOSXL%5UQA+M7UTD!oR)vK=|UyzS(iw6XcK91Tb=)M+VBDBn z|LB#3J(9!{`w=HT^8kkQ)w=v!xZ8{j7mtnECYt!San@9o}uA(S&El)=8QJ{$_b(J_yvim zZ^Xq3H8^5;F^>kbloVgGmF!X>lP5`5qjV0vfZiGJY`J`a9diG6?7Y3RjlL6Id;Oik zF5rZPSo4uM-&67Mj7hGtU%0CVaXfNt|L0~%0@HttX%^0WEDdr#)&EPVX4nIE!7g8( zK~zb&R-;9 zIqg|ZB-g$Cia`*zq5n~}jVDlbTeqDt%I=62g*-@WowTq{n*=U!X(XZk8qv1*6-;n$ z=FeB5N|3>Cf1q6afLB_WbJ~4Er|%~3tVTwrw33h|u^Q{K{^HD=RzT+E994Wq$+stg z&2_4R^vUIwxTCD-LO zgNS32^;wl&GBy646WbjE*I;FUJ^{i=Q~e8MFMF+$`CTD~3zzH{TF^0h0$~i`m$D%E z#$^z*ZJM|Jt9K*2;*`Wm6>VM#N2|bS!<4x1e3`2m-ywIpF_%rJEnLXep297BtFLIT zD;P~Y6X4-wu?jr!c8)_*F^N+@UAq5{bN2A|-w0jstG1bl5_w=e4`sCIS&+$QthiQ(K`6g`nh@n45?WO@e|nbK@5EQtAGlF?!4wH_mO~ zy|d4aZNvI>DoD!1dyq~Q{k~R%@;~Cdh~@u_R&V6R)?`hZIY5SC=sQ4{L%g}b+~IRN zFdhlQtS>hnwHBfNEsA?Xx)QxRLXn$Msr7D5PK-KuwfdsNU(^?r^BYA!sN+#rn>pn0 zbXFG$$iY)ah9D2l-|@gX_( zw6#e~6>0DZ=<;7C+esfg8i_IzWQ^+8qy0a7I680%aj>%mKd%6m2fQz{^vXY5#PPN7ILnGhE51r2 zxWLdTV65+lY38aX-GAC1r{U{5?V#M!(@w{tGiuy(w-R~YU@BC6w>bgIcNxPidHTIC zW|1DVqN}}@@Ml$-N!i_Ur%}pUyxeL{K_pF(tqwRyta8kCR_a*DH z@T^TY)BH6L{^u|a#`F=!r6#=-^aT#|yZ_?gGZLNVf7%Zrx+-EhfUMO2)_VMJX~?th zkiA`jwFp))6|%y-$2Y@Sg7D)}A(R4y5jNDXDSxUmF@z7-r29Cf zmzC}_=_Su-|wF$iU zk#iU}tPRa8sI@>i<{html}" +FONT = "{word}" +WORDS = list(string.ascii_letters + string.digits) + +class WidgetCode(QLabel): + + def __init__(self, *args, **kwargs): + super(WidgetCode, self).__init__(*args, **kwargs) + self.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) + self.setFont(QFont("Jokerman", 16)) + self.reset() + + def reset(self): + self._code = "".join(sample(WORDS, 4)) # 随机4个字符 + self.setText(self._code) + + def check(self, code): + # 校验 + print("check", self._code.lower(), str(code).lower()) + return self._code.lower() == str(code).lower() + + def setText(self, text=""): + self._code = text + html = "".join([FONT.format(color=COLORLIST[qrand() % 7], word=t) for t in text]) + super(WidgetCode, self).setText(HTML.format(html=html)) + + def mouseReleaseEvent(self, event): + super(WidgetCode, self).mouseReleaseEvent(event) + self.reset() + + def paintEvent(self, event): + painter = QPainter(self) + painter.setRenderHint(QPainter.Antialiasing) + # 背景白色 + painter.fillRect(event.rect(), QBrush(Qt.white)) + # 绘制边缘虚线框 + painter.setPen(Qt.DashLine) + painter.setBrush(Qt.NoBrush) + painter.drawRect(self.rect()) + # 随机画条线 + for _ in range(3): + painter.setPen(QPen(QTCOLORLIST[qrand() % 6], 1, Qt.SolidLine)) + painter.setBrush(Qt.NoBrush) + painter.drawLine(QPoint(0, qrand() % self.height()), + QPoint(self.width(), qrand() % self.height())) + painter.drawLine(QPoint(qrand() % self.width(), 0), + QPoint(qrand() % self.width(), self.height())) + # 绘制噪点 + painter.setPen(Qt.DotLine) + painter.setBrush(Qt.NoBrush) + for _ in range(self.width()): # 绘制噪点 + painter.drawPoint(QPointF(qrand() % self.width(), qrand() % self.height())) + super(WidgetCode, self).paintEvent(event) # 绘制文字 + +if __name__ == "__main__": + import sys + from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout + app = QApplication(sys.argv) + app.setApplicationName("Validate Code") + QFontDatabase.addApplicationFont("Jokerman.ttf") + w = QWidget() + layout = QHBoxLayout(w) + + cwidget = WidgetCode(w, minimumHeight=48, minimumWidth=100) + layout.addWidget(cwidget) + lineEdit = QLineEdit(w, maxLength=4, placeholderText="请输入验证码并按回车验证", + returnPressed=lambda:print(cwidget.check(lineEdit.text()))) + layout.addWidget(lineEdit) + w.show() + sys.exit(app.exec_())