From 39fcaf35caa2ef7860d84444120fffd49f05822d Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Fri, 22 Aug 2025 20:07:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=8F=90=E9=97=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E3=80=81=E6=9B=BF=E6=8D=A2=E7=AD=94=E8=BE=A9=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/defense/doc.py | 10 +++++----- template/template-defense-paper-paper.docx | Bin 16924 -> 18960 bytes ui/components/widget.py | 9 +++++++++ ui/main.py | 10 +++++----- ui/pyui/achievement_ui.py | 2 +- ui/pyui/defense_ui.py | 8 ++++---- ui/pyui/picker_ui.py | 2 +- ui/pyui/sub/defense.py | 4 ++-- 8 files changed, 27 insertions(+), 18 deletions(-) diff --git a/module/defense/doc.py b/module/defense/doc.py index f75c67c..3824b10 100644 --- a/module/defense/doc.py +++ b/module/defense/doc.py @@ -17,6 +17,7 @@ import pathlib from copy import deepcopy from docx import Document +from docx.enum.text import WD_BREAK from docx.shared import Cm, Mm from module.schema import Course, Student @@ -37,10 +38,11 @@ class DocPaper: section.right_margin = Cm(2) def add_paper(self, course: Course, student: Student): - temp_table = self._template.tables[0] - new_table = deepcopy(temp_table) + new_table = deepcopy(self._template.tables[0]) + para = self._doc.add_paragraph() para._p.addprevious(new_table._element) + para.add_run().add_break(WD_BREAK.PAGE) data_list = { '%CNAME%': course.name, @@ -48,9 +50,7 @@ class DocPaper: '%SNAME%': student.name, '%NO%': student.no, '%SO%': student.so, - '%Q1%': student.picked_questions[0].topic, - '%Q2%': student.picked_questions[1].topic, - '%Q3%': student.picked_questions[2].topic + '%Q%': '\n'.join([f'\t{idx + 1}、{i.topic}' for idx, i in enumerate(student.picked_questions)]) } # 替换表格中的占位符 diff --git a/template/template-defense-paper-paper.docx b/template/template-defense-paper-paper.docx index e6887ab519f68aad4a78f3b73fa0d0a96a969c2a..d1a44886d7cb40f9b4e8929d5f43f796607c2360 100644 GIT binary patch literal 18960 zcmeIaWpv)ivNmdV%uF$}9WygCQ_RfF%*@Q}n3?04nVFfHA!fF(XZGwpGnxH;cisE< z9IYkkm0QmvcdM$qtGY_E62KtH0AK*00002+0pux(nZp190LZ}s0FVGa0jUdETR9k7 zIcR@%wK25Uq;|2iz{>>zBFhE<`ndmpxBtN{P^UN|-OY={j=sP zBAqSA=xTSbtKoj`&--reio@^_X&OJnVBvVQ>i;ZI@1eCr__5@Flo1fwQ`-R z_k_5 z8ZHFnu)8y;X|9`8Qk&iWGO~3}^oWZ+TC+7WsCf>AbuKoT>Kc$OCO75tAwe*VV;Mv~ zbHJ0^OK?-+5~*1F32e4gX^=-7( z11JE%`#Ugz?B7&4RnZId?L#iNJ~R~SLxr{N3@z+wsDC^Duj>8}*4MvOy*y4z0+Y0R6LXI$T^y{rfsu81?LrU>pY5gCPci`SdpIIf?;B z7v-*6GQOIbb?C~n%_disRX=h5@ySDMWt&Zq^rtJm*Iq&~EAdzOxMAevFNZ?i*m~1k z>f(WLr&m%ZdBj5li@JEP{Mb9Cl-9IwM!a0Qr4=Q3R%0l|`|uCQ_0}tV*KG?NBhpcv zzO86ZL1P5HtGI@PGsQuA1Mr7M!W8lqjUDpo?=}7B1 z55fvVano6FVbZFuGRAJ%EN`eo8{W$g7_KV<;-ghNfd8Ai0BeP6073u&sK^2UAbhlu zv$dT8je)hkqvgl2_uF`Psv%{)(~r@PcIXWc^3XVPK||=o8~e4k(`vi2VJwwI1hIuE z7+pRob0#Z{fG-A_JSH2^Z7_%JObhDfWWpk{FY5`7y$2&KL2v|_cqLAmJ!F?7!`Nuu zb=^1!D-PGw10gWe-e(%1Uqo|@ZsW{n(ccRmF1oqHbILp4nZtCyza6t19m|o1Z~67% zVWH#6#O_eQ8q1gUL??umD}!iV&N;zw2!Ehp{ga^86DuSqhyv>%jyvu4rVhM|Pde|e zJps+nM=if>@M+{^AZhb$~6@ zux^5cI{Jj+ST!nup$Z?H3e=bcCsC$Ig%$kJa8Wf5B2xr0>)<-xB9qunT0lB!EMDX$ z3~oUIYP+cs+pAB&q*kaIpt>=ddXidHI;(hIOS!_V3&{9!FNp|@)PCHbh&y`6ghP-~-aX=$5)wL7*G3Ct4TRJLT?rKS48;#AAqwTQ*`|l#7l1bx z;!kp4j`^60+(9XB8NBO0YfOn?4V@UB4@wpB2_S&O1ZMLlP=qAt;NKLw3Db6&Nh=ik zB+C`R#c#R!K0)~Hk0%m_jSY%#FV;DZ3$ zp;Gfrnf;Wb#nSvXK9(2jhwq^}8=5SYW$+nyqV=5BUKfsrRG#I^p>DU>=w^JZQVAGf5&F88Gv>5#PcVcBe$u_i{1 z*{MjYNNoo%5zhov+~Mxa2)twVLI0Ae-+@{J`JqDR6VJuC>FbG#h}p0#ee@feNJKXz zbxpqPwxQv786*~Jywn5ws$gI^ZTUTLTJpFZynIsH{qfHeI!Rq7Et@rYI}U@cz?@U6gJAB&N?diUf3Fw3?PL)3pcz~huPUr?R|o$CM-FU+_Idmz_%`MdLFO8O~JsxBllg& z%^r!^u_knMzC1L=ZopdG(^1FMh}#}^z5VIwb%Lk;`ABM9$PLvISf3QCiE|@@S|!fx zc289^hG-z^lv^SEY#LM*!Q4RC|56)Pzo7uKHMg|ZHs0OX-IxzWMLfzYy7VVO2(5&z zigQ-aV5G5s2}!Jwq7)=VmFxAGEs->pAr{?=nLHg5#X_yjLTJ*&_lp+{UIAI;=To;|&GA!WdRva}-_s;cW~FzEB5v z8Lo?m>4nvnT+De^owJm=dwCZJc0z5B%j}|v)Vel_BtbZ7Z93!0rd^81oshs%CA6e| zPCl=sx1VdZ?DwU=hn`R#X&thWMH#5xOHXp=p0wSGcw=dDrkSUdp}QGvnXlYjpJSD+IBeCG@Px*?fb$QX+E*GY zX4l>*G>7%rbWXN>w${$%3p?ue#vys>FNNY*33WWcz#*Lqqn8OTvAcOBlBC27m3^Ht zvmCN7;&zeS6Ea%+s$5Gqw>mAyn_1jm?>*`FJnt&r2n{v|V(`#?TL*sPa*T?|x9iZr z`&w&UL%jt^O3B7Yf%Dy}6&*ZAOs^#FF{U1hAjRIr3T;l5 z3>X$*S0IZXGRWur47fnLK65mn1O~r9&UpAVY?DE^vER34%65s7UNVx)KgNACc+W1% zb@hmN>8|F`DHh|}I2|YJvF2aTx>11ZyEQBWg!7L3-{wo*YW%E(A0C1M5C8xyfKPzG z&zJsXWBhg2^ly6u@WWN`argi1tvq2&x`!4%;6k)jV3)&IJ{#|A5n8}31#)QFiG`Qo zY2+zYOvAtz@icxz+n=@rSEEH!%VoF8=W%e=l|qCnSw@tAdDRwDREsBfN5@&jQTgPC z!C)Ymoi&cOt~G8!(s3QTY4y&b&UDh%LB-yit0iD{4&-+_FJgg85?6T@t~7Hk<-Rnv z7DH#N{wSnbLxsqrR^s0}u-zV_S(FsZHWB8u{Bsx(GF~))22IcN`eFCu(#f=8>>OZJ z>eI90U7a-(_7?}hpX(8PH8G)ZUMmk1gXE*kz2g-Czea_%C*zLBsJe@i?RcyU#gmHu zVh!P7L!Lxu+L-`msx|NdwA!Htou&!;0Il{0JOr$be7mPZ5`p)+dPUy&kc@xYu&9sf zBAXxfs|_>&0OH3TzYCd>wY7tlwS%GkZ?p2zBnj&bT6mv}#3x+%`$%6;Fhe9_&4S?y zvt`^(^zSNNa7#wG@9p|p5~TpR4U_v^)OYCtyMMbAFK-D`KOp6z@Ur^qkp2M(gW)QbJ_O|?uf0D6dQU_Xc< zw;;Bp4L^=BwJ<`qE}5NA4j#-<##F4Bj&_TM(rNL5DGDoS3Ni9t=hTNmkiMLXD+7IN zE{3gHsEnKJGoT-eur4lB+vgv=<7GG|%#a{jx1!g!`3&Le5rjgX({@;<%cK?kv2FvQ z_i&A0zjo?;VH!Z?zD2by-+*EQtnN-~tI1d*r1cl_?~-hd{`sj~4d@$*GE!2=NWlI~ ze$LS zKKYH12vV3l8atyLl<|v1EwBrx2zK?0+tBIEreE~ftKk`YRfAQqt2N^4v)D-5s7 zU3N3MzOGCVA3IY)Ip)?(Ole6IyI;IzRqD(^Y*6v<+mE*zsqhgW5P2;@mRzdC;_yAW z#rSG90iVNwFEJS=~bW|M}jR%kygdeA3WzjIh(RV{*Eh*flQJBqYBK=iQskPs-*;gJ>R;(W&Mh0QA5k5QeJjZx-pg%kUW-!jn8@8G%4JBD%TF+?dRwGL*Sw zIe%A&@3#3+>FLqGse|5c>OeIR>$VVjPxG5P>?)Z>QE?t)Z>w~mm;vboQn?$leJ9lc zy9V=5b-~<1DE?4~LS-b>kdcJ_nYx_8L~WDU*(b3w=StGVb}Kc|v0y5wku?Ihx~7^) zCAd&c;tf%Gn=cj^O!=m;wh7$^l0W8rqYJtW=6UaML3Jjs`_HqxeM|1Drt3?ha)4oN zJGeQrl(W1gq5T1ij^HcwLZG~>mR!2Gz?`9?A;(m0dVKqe00p@^GbVj$!h>qcF+v=c z&R8vU)R;1kzhVVD`oe(EcixX@08Vdz5oEM{v5AcTRwHRPbIPt^FFa^k(}%%qIsLWw ztdoBdeuqKNvCB?u*=;}Nra5~|Z8P*+X3nxFwOog}YH?IQw}|_>_+6JLr)F0v(p&4N z)CsohI9<@hjQCww()|7^HW!ei6FxAvJ%~o{#=%PRmK&9*mS+X$`lgfozytAI?+s57 zx8U9^WB?dN6@7{ya01ksB)X=NMo+*56mgjF2Ap$XfL(Fg0g+NCV-fZw`jx z{QB6l#xr!8>T=XIcJC|-^WP^c=^&97$rtxW`#8dYNgd#Lpc*taRE`LZODO`q;<`Uq z52XN*_4QZ6^o)be2^aS%n=@jTOMUUb>WJzqsD@Vw3eEM1ZEJ;-v%%*NKhj69TDbH^ z&k1*b#Z%MV_&+GdI}YEzfMPq;x% zEYG?Z$(QVl>yFd?(tc<8yAS6PPQt2VCNXtRcc^g+VlWZnzOs z3ldOXTZ~B0n&^cjU!q(#CJw}U+lGvIbk}ba0=)bB`Vy_o!})gdmVC9ak=B2R^hk=L z!2}Y3UGiy=esbG`nQj*-gQ!pg~yRBsqOJ%k18vTvz8Fg|!Ogkw!9i)wkQmJ3kjfWzUi z8<|R$WBr(K3#hNoX&kqXP*r@cww|^T?wMXyx?4_cE+lQ()dX48&z!#VPT&cMSF&$q8hu|rM)`@TNT;N1^)1ZMoXWQ);Y`d&n)*|Q zn_gTFJ_zFd)d7vx+gnjXbe>8vS+#HH;dnYw`(!?l8>bE{lIHt&=-qQNe3~pC9`~Q8 zr(M>@aJX4q4}CXQOPYa<^k-V{54RmM=kD(>Pp>B;8;zH%y)<#(f}z6a8)US(-JiBE zm8-nmc73cF&{KZuXW*S{iWIHmOYH(+15Wz1rS{oEFV-ze6T*^{VS+c)=s|gU0)b#P zVjE2CSd!d!g0|APn!%Zf;Akc(^RM#RYfm~=O5H{0@pX!g0tx)D-zgR>sp7^IY_|T@%@n| zo>#^i>zdm5Y1l*E-rikMUJ|)AH2QR)?nBG@}dY4<)jKJNY4pShGjctdKx#rtd ztVZtUT7I{f-!g~boFNXLX4?4*y6O?PxAjIG{jL^Xsqv_WI*^<@kMtmXjFVO>(m6=c zL5T~F4$~8r;#Hrs%xZ2k(3lf2P44^(G)Kcot1wN^7{xWUA->mrU=#Sx4N07P7vO95 z2(H6p+rpmVv+J#y24r=6m<-M8vQ+KO9anDvRwxADvxWpqau3wKL0+Xv-jX3txM9sF z<1GTP=2N;a+yeyMVfgX7X6*dEPzwn6^uv2l(N<1RO4tS&Sd-N*$)!>oGzEYmwQb8O zKSuI|cPqw}9_iWbtIT7)wlWcA>#g~_KN-cV*vFViVNT%Zh}0vZVuOd*+jS%adLgUE zK2HGO!U*Ye851pF!XuY*?%mCtR&vgakj&sXtx= zau|wJxtV=IHLY8=CR`8~+^_S^cN*hJbhoO&UjvD8e9dXS8`6st^VT>bi6J|C@+BjA zdMA_UZ#)Eywof@99{8r?n<8REu+W?e7MHYYcANBhheNzl!SmionrD4Vd027>~4csC^~53i&ZOjlh~Ywb7c@a)KGe771I!Xw0mfu3yyIDilYteET^OZ;bMPJWL5NGl7lXUvpqXR0-cg33$uL`|k{jTc@Ch6AQ~ zFlRQvLBjjd`DAefC2gMXveQ#s`+n8OdKMiu{e&8O<#=;4H14F~wit4N=CzM^%cq(FBzTkLDxnrl^{BNrP_)xj(g+_(6S&vx$R2Jsf>`9rk(s<1cF z!a2iEvI|Tp6uU&Is^Ue}65!m8_@0No*Hg^Bz0I<1v(ddjJg-+`Q~`*|m<<&O=T*=Zw*yW%Sh7A%ajRQ7i^|^VP`((;I2VV~{+`4vx7{ z?E}X5;-9jxbjSxr7`18w3kG8d3ru+uNA%ycEh+k^()`$BmI(*P<;*jmp!k${&JcO( z9QIbMYI4i~E4{&q&thxr>b@?7S60 zx71~Wwq!&c3*x??+n-Rs$5e#w`}q8rl!pkZFJo#5*~$l#*kIBYR}NO_4x)9HF`n(0 z$3^xSAHN-Edo}na^srQz4c^^oh1>WI%3kcsUWw;WCA65F9hyC!k2#Rr_K?_ZF0DiP znafJV{(z%b4%X_ZUb`DLV=7C+5foPF#9m>q*3|ra(uxlah0TGn*AuAT@xIJyktB8# zlg*O`s&e1b00WmyNn0AJU$bXPqL2S(#AVe2I|96rVwAECa~K*p1Xr%=$sCLPVCG$_ zc)WSU`6bYvvtKt;q@uHBSJ1kh;PQhB|41hH?4-XkM{TTjbwJbL!d2SW2gLX@ zX)VQuV^|X|Ambw@_G)3Xg$9x;hl!x?ip9OlI|JMvJ&@(oHCwxT4Qdb$Jze6$ro6XLb&F_tW7gJC`)r(hOi1bp{AG1koSnrn~I-SELEZH6LG-=IoKC~xJQ z<@kB~4nK5s#N`k81O9azO5;c$yVh^8A)~UB%z>AZc1&z61d}Zk0iwHiC_+@PXlOJf z-#6Y7^pbp=wf_65_z6QV)Y>B14wzO(pfHgm;f6`Nao~3oT|s`1%Lvlj?oRcT*ul^| z>br@UMOd^fh)Yin$w+$c4ARI*(L<8hDR8gT{4BZs=P6jkf%*tk5Ha-L{=q;7mbyqU zDE*1s$mam^h@Sp(AaK^2DGoV{f-E@_@ihyhh$G6H%)t~6sD)^L{asW(9X8?A0!&JV zJj)Rw^i)H{hh+4&co)81VPPVh%+#p`u}yW;1)?nc9F!KL)Y%aa!nmL$>nMIB_qXW? zR;Nu&1|kVSM!^+ZRGSk$;O#<&380BgLT*l{Ry^8XQX7Q&29vp{ftc|gdc}Kx{)J$ahZ=?~eKZNhG=9;%|DeDg$%6Rjb@eAdQ}o zKJ6dK+_&D&Y-YV`@B^EI2b(jFRyL-2XqL?T#>Uj(9qPR_rc?5my&oi0eck9{DXw&U zR`4%_u4IuW%4C! zAFeLD2sEtT-#4%)ehZe}wBzdyOkTp7tu5Q8G0|Co6HZg9-7+#dV!lpOW9h8FU|scM z&S%o6EsL2q-c)7&lsrR%#GCsQ6I6uC7zrQ{I??cYO!!SU@ z$6$p2VNoLikOAmB+B;ZVs#sdkm^v6*{%#oHpHm1m=-?TJ_N&}Rrlcl|51SbMWZ$m?C|ncmGMCm*A&SgnswTC+_MvPLk{e#X z8=pqLq37upxx-Ba0uR!aeX%(@HFrKw&~)X7PEzoDQ8Hq>#Cv~pIrv?`?`KJ| z)U7o#YS!0xYYBCkGfS=T#wQS=2zfXwa8`)O^sw}d-ZRV{^^6{BK4xd`Rc{#jBqUZY zIPLy?x(dL^h7UaJJ1yVV!Ol2-ZYhNu&=N$*y*@@vn>}Q&h>*#cz*1LbE7Vk`qkgc2Rth=Laz2hX*m0v!B zn2LC`TLa^T=gU;I_s!OAUTdS2362eK8c$lVNSmr0C61-_!B)h$*c+hwWP&%V;Zg?j zi=|T&7wOWRT@6a@qaX4mk@WVqle@FA@$5`WIZU8bk*z51cN?}MQ~a|AhBO-jiEGu? zL5XEY%w?vLT%mscv;&W#gV60Uv5ZRESA2l69a??1bX44*nN#XSa;vQ!gxX{AOgeDj zi=aMoqSiJMz+;R1NhG9EHW^c4NFrbZmio}Vb%OX#;CoIXJl(50dvXY4HjVOmmbwy< z^n{P);u$2Y+mm>u01_%LhVHEP7k|?8GDagMBNfoHN$99FGSP1wuF)JOr-j185%ZkKzY( z+V3+vjM45dNa9!9tkI#5TS#q^9^6RUrDlyW8I3@GjXE^t+)N*=p|k1InHu$&O!}1;P6D|g%tLq&8T8cO&BwJCeE0&z05FRz`5}a zCXst{E#ivN#c{gXAx#I8X}`=QeClXL1`B<-qt~j^NPDjhxcxD4d}^E!@)_smf?#() z55A?FfaR_}tEu(-#g%$73e35=P|vg4)VgPdiGw!9az_;k_Ub|y(Y|FRnKYqR)ZYD; z8Gs|wKwP9r6!Fp|mIQSUThdoPd&*RweH9?=v6^1GG<^sKkRqKND#%D3T$S9m)Rsr| zt^PF+QJWnrZlFe67Bml*^Zlpu{xyy9wZ`X4c*b5es5J~y_9asFPDjz9-Q;()mlXce~ z)2B2N3qD{(p^O8BlqtPbRnBe18H~*7h(i2ZjK#NXv5aXv&2ds3J$pXtwi=Vqu1?xw zH}c3zfKo|)l0;&s_{9fAqbm1O`n~F&E;t8kp2T=vL-bz_p> z@5g!dnpwbtjM_EwO|v))OtY{GO|xDKw`Yx{GdjL$n+T@lF@bw4iphCxFrWH~J^UzU#@Z}732v-Uj_ zd5zE_6TsLu$z8(VtvvXX7kSWkereo9>$b!-7K^dtEG6f%xP`G9Q8;z-arGzi9vN#i z#vRKgMdN7<2}CC;LhoMNSUMDQqu~p2F|~r1_(whAE0sHO6v1Z!PgewipMI3=7n831 z+q2PDGWGjJ(m>vXAw_63S>R|E_{)-8=scZBO2`)HktN1J-dAjyFS8S1IM*bsZMSs| z16hT^M5l~*HZgKUsICN;x<(oOT2VQ1_x5fax$V%j&}x4c zO;HAH)~?d;Y}T&(?a-8`lNAI2HmaQA%Jt&TexTp!(U%(V7{&l`jbebGa#!Z{ipN2EJCBf0YALr7JoTx&@mf3M`Q9&jBH;LslzV&ruf$}+VB z3h}B@XUj(6cWL3M)p;{%Vw`8VG^#wxTvaU{J!R#;1ogRZ#I-5sXMOloc3VxvUD&0~ z_e-|~xtdjTQ-}q&Ws4>pK4r>#b+v9soVvOMHjNsK;lu%=mQt92*TM(YTkoXJ73;9v zMB6j7bRbhhRW!e6DY>s=iJPp@eXgLz(k&S^D-9AjEnFnwr^u4*OXL;T!%-&U)f0y& zDp!vfneq``HUuz{!>pNSWd^QlN zqZW1&JSqM7@kK_-{%dBff*KknN3P>uE#V|FG!BUkG4%3|IC`Bkxo*t1d^bBZ%xTEH zJ_rX;W-+|4^ek)-I0sN-apx+z96sppfBG82OZo*XaSIV;dFNwqA^MWv__1drp%6@l zLLwXr27YqLmt5f4i~jtPMbt7f7r(k$u9R>!N;S1 z=N0^oMm7|3G!qd;{!hA64wN;d|F`Gi|MUMWkwACU}tiBN=vF|)`qOQr(cTOtZnh0Bb{Pg;(8^e<@alTS-Y&>mwkD{9XmVu1xq2`TRz zx}rewU;*wF((9w&Q|(L5Ez<^5Ta``);osOO7&1fW_@^J&=r*E-Y_E`yQ> z%pu2u>2A-QL{5?|tHtW+HK9n$oK)iC$f<~M0uq;@0HZ0#4pdrC-CGM1999B2wABAtRD zkn&k-dUVyrltvzAYTiEuxh#)Qqg`Lt^ zvmH*3Gv#AwFO6-*6?>VSlCyT!UN@py_ozpXmLVMRJ9?e8cwPNYkp?j#S{L>GWn|88 zE>7XHllF&Xrp_50+pGMW8qRx2M?CKS)l#S`(S=+Gd6L;i#6hB%w#Co&VQtUNs$2W^ zT_>qe%7^iDcSt`NQF!1~HHr9}HD(uZG>TLnL#YXv_%-C3U50AxQeArTg7=*RQbKSg z^Kvu9i0i1q-5e!fKh0e)C=&bP-NNM(YBO?%NPC!g!fW=~z2dRgJQ&>KHOtOs&pBnn z+>6lL?Ijy}Zf7OTnYO8D(D(3>8aw+JmhT%)78_RDR+~oxV}Fyjt!^QQoloTRtdd7- z6$~3+ij0*{%End8Pxvt!kw8z8L13s8iR{T2s*n%e&J#<3v>l8_?wO4-`@b zFit zn?D&pK)Rg;Df1*b7^v_$JMJ%T80*T;$}6^Bt#0}(ZI-~(zdkjx2q~a5)9S_>;~t3L z99bHwhuzNvx*J~o5{Lfnr-2zIDBS$0-bk?OTLP2=#}%_XK2SQo#t{dJT)IB8=NP9+`?9FZco;towSkX*XD&}gI z3%V7SpADYBYS_6af+;0}sU+SwIH)Ijg}BZcN;g#K36$vxlKzRk_5^}wTP-+K%N zL&H(gbn$V_q2|3$nua^56DXU3t&yH-zuc<3=#faYmU89VfxgSAMFYl{vuq4 zk)h(nRLQ{%>)hMH%>IC*1@Dr3I=0~bbQkR{V(jDSAa^hwY!gb{yg5YXN__oP^n}?B zeSXT@@RjKjX~Z5_&q({_BQ#WZEkXx_4aaC`vnkrT{ppoO`}KZo;r;P^qhqRIDAy`7 z?oMq!dzUM#lJuw9?(q&RdqPC0qTMs+*hD+MI z7r|XFO0A!Mwr1ar;d;HURZSWeXBd=Sb_&MUfnTwS#VOSO+<~KgAg{7$-YK|Je4G03 zK^h#8uSqf=zJsTaJOku^dkCBj^%VZH%#krIXWfkl53qSp{0s+kA?|1=xYw3{Ce-NrirF)K(lA!t{ug}+!C*}#G*nvm0-X;CI%Li7gI<*v~aLuAVq(W ziXfTe8<)`)yLR_zI)j3J%G3G$vuMOmPb0@w?DNHnpZoyk>0>mNLcnVdoxZIEqjGTnpwSvap|tPK zZ1NEq?y`|9U3Pg5|X&8(k@f^whI_jDI=WbDdulsiQ-6TgqL<*$X7j!0d<8` z)|;vW7-m|n3t&_$Wq5(=se$2%w>BO@kG%zOTeBU}mKc8GeRvL$R^A`Y`%f3m&xa?A zvX3a4c*ws+jafN-)zz~w{4Ek-H$l#7h8BHbBeqc>;hsu*+DY|?)pD~UUJh3^{^c>7 zv_4fm#fs_*Azl{zfe)|`d@`Was^5h4bYO-4SO7d?#WL%+oo{E_Z$s-{erW3`ifLkW zS3Q=y?qA_k>FKZ^tHw#yLoZDIg~Fi74+pj7&u~w9JZo8SjpWhKx?FOCGa_DAQHJGF05~2}~ z#^U3}!s`G|i{~&E89N&RAY9KzdDf3n&Pr)%i_?&TibutPpWCP!%(b{hl_V{d=G?<{ zPgbp8)5SLbSk+s8D17=OM6nZ6jCw_KSxU_t^rHuZW5eM723hh`2#`p$;3FyuYw@k; zwFZ14A4<7F?O0f85lm&J>YIi&H*yN_;ZslgiHx=;HrhV2*`#Bj?)|`5No@womrkeg z>X@`3DbiX#T)Y51*7=QN{y6=DlFUxc6zEdBAU295DU@X4c?~1c^@OTwJtuF)WFv(` zvRly4kHNGkVNoPriVz}R84;u$J43pfp*m9MNU+D^t6$-3QMOrarv1O|zz?Wu0^5Tn zW^lxfV-ziO6xd%B?CKb_#e53rErvt7$-&NBSHqu^YzQP9IMdthg=9;ui-^dnjlYSu z!sKg#LkBcPF}5dEv}i@MNK1EjcoBI-ACadkwctOGtpO%*(iFB}cFU~oG8CU{wlT2a zn;DCr3V#=-Z};|iJ{x&PIB>qFa1&m- zKtAifpbKjbBC`#8TLiw1$!X5H_x=#ze~R|d-4deeN8jT2QHt;pb^8%&`@6@MM&H`* zcgg-p?fc(Q+mBu$AZ|*$hZgxG5N;!9w_R$QE;Hwh*H9T2gd)rtpKB#d>T_J970q^L z6`s~HRA{vBisf1uFireB2kt=z(dR0IEvl}?)~|HAfP6S)az;&Q1Bcw14}`m_1B(6O z@_Z5VI#aA{T%iF*xr{dE;xPStI&I7Olt}EtPzQ`Xi(#OmR{m+Sj;s`syOrE&Z1WnN z*KC_HF$|Plmk}IMm^oD(gv(zTrpRx@$<_EsXp!;w*uqVDFS8tV^10L|Nx<_**VKCC z9MGI@hWD{m6cuG*)auT^Z4VrcX>yc)D>G6Cl0`K1g8*JlBzg3Dee!z#>9x*7=wY)~ zUcEUlbz(VTH%Ps}b!GjrW}~t{rcQj*D%5OWm+6rgJX*$Kl>X>6)U$cao|#QVv^7a8 z@C{bMuIn%a;cC`lzH9?(uioD~l8^^l;WItrT_gwJwA1Q4(-6&n?P_%*!9=Y; zOzGxgDTX~zV{ZY~Ge#iBK-71Xm+8(W5zvU$MNT@bZ5P=bm8Iw?FX)E`-P|bwB zuq|c&GFhq@qLk>cg_av_xxL*@n)U^E884T%$7@;s!Pe^o1)klKx^ix2OVZz4nR&6Y5VS?#KX=dG&eGHF(;5b$k!!I#&F$V!Ad0TdstXf;t@_78)0U#B9up`S%zb z9%tu4Tv)==L#q97na#scVyM(I)8n6I5yHbxWnf8wa1OcrFm_Gn>x-kD-Bq+m{?cjwz7+Vsa{4bB{q0y6$7h{R ziym|le}@}$0kYzYN+2qPS8@nuikU>#Bss_$N?woPG#z95-X^HNa9cf6h+Q$^wtoM3 z^T!yOzg#IrPoj3AcV& z{En(BZf9DQO_EglzS=3qrXMLU(q)yI=1m{$*&stXFKp zy}bnIKAqEZT#2E5sHmr0d;&xI?D4FJJo2RIRC4j)5Eh~J6txVT*?5S&Y~Cg7!bYt^ zCe+8*y3O!mzHFLj7{)vP#90X^BnwMLliKuI8d3l}{S(|1Fow?V;$cT!jrI!B)RiV@ z_e>dC1|L>VsO8Fn6_!vAQjir^OU^-dmB~X9|NKf$l=jD4`R6>qfrrhl`=f;HL#%N= zMEcJ~?SG}<{AX$VfAepC6YD>=h>4o89$ILy&DYKKE)(mFRoP*LA_;N_4sqD#&mv-y z`Xef4rW@`1g%l2lWTEfRaxHCvLYj2ni%hah%w*BAVYsEiyq;gpfW!LwyQq<;IDrlas`=b!}F~xmd4O2l@n-_Mnu_E$n~=vYR@f5XSE&M<{vu%*WycH z{e3;qKg+&yZE-M1<~cVKIzyoE2?aW#p+Xi_zZiUpENyV*r`rVW*(faugJ?Fto$+4# zPsaubMD<}+{`c>+{JWn2KL3}mw#Z8So#5|ZiTF40w{y?OBmeTvh+l!f=F9&Hz50mn z`$zWtukgR8kNpV-03d+>1O9(VCi|7?*Bqfgxq?4ZhW?o`^eg_?oQgm3$sdvAzvKU! zVeu>c*U0lf;nnDWz<-TH|CQp`pvXTdRB-;F_-lydukgPIxcmtQ02m~HoY0>IagY|cWV->&{2$^ZX| literal 16924 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 diff --git a/ui/components/widget.py b/ui/components/widget.py index f6cccc1..cfe49fc 100644 --- a/ui/components/widget.py +++ b/ui/components/widget.py @@ -109,3 +109,12 @@ class MyGroupHeaderCardWidget(GroupHeaderCardWidget): self.groupLayout.addWidget(group) self.groupWidgets.append(group) return group + + +class NotImplementedWidget(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + self.layout = QVBoxLayout(self) + self.label = DisplayLabel("🚧", self) + self.label.setAlignment(Qt.AlignCenter) + self.layout.addWidget(self.label) diff --git a/ui/main.py b/ui/main.py index 118cbbf..9e3fd5e 100644 --- a/ui/main.py +++ b/ui/main.py @@ -20,7 +20,7 @@ from ui import MAIN_THEME_COLOR, BLUE_BACKGROUND_COLOR from ui.pyui.about_ui import AboutWidget from ui.pyui.achievement_ui import AchievementWidget from ui.pyui.defense_ui import DefenseWidget -from ui.pyui.picker_ui import PickerWidget +# from ui.pyui.picker_ui import PickerWidget from ui.pyui.test_ui import TestWidget from utils.function import RELEASE_ENV @@ -35,21 +35,21 @@ class MainWindow(MSFluentWindow): self.achievementInterface = AchievementWidget('Achievement Interface', self) self.defenseInterface = DefenseWidget('Defense Interface', self) self.aboutInterface = AboutWidget('About Interface', self) - self.pickerInterface = PickerWidget('Picker Interface', self) + # self.pickerInterface = PickerWidget('Picker Interface', self) if not RELEASE_ENV: self.testInterface = TestWidget('Test Interface', self) self.achievementInterface.error.connect(self.showError) self.defenseInterface.errorSignal.connect(self.showError) - self.pickerInterface.errorSignal.connect(self.showError) + # self.pickerInterface.errorSignal.connect(self.showError) self.initNavigation() self.initWindow() def initNavigation(self): self.addSubInterface(self.achievementInterface, FluentIcon.SPEED_HIGH, '达成度') - self.addSubInterface(self.defenseInterface, FluentIcon.FEEDBACK, '答辩题目') - self.addSubInterface(self.pickerInterface, FluentIcon.PEOPLE, '提问') + self.addSubInterface(self.defenseInterface, FluentIcon.FEEDBACK, '答辩') + # self.addSubInterface(self.pickerInterface, FluentIcon.PEOPLE, '提问') if not RELEASE_ENV: self.addSubInterface(self.testInterface, FluentIcon.VIEW, '测试') diff --git a/ui/pyui/achievement_ui.py b/ui/pyui/achievement_ui.py index 3fccfd4..1479ae2 100644 --- a/ui/pyui/achievement_ui.py +++ b/ui/pyui/achievement_ui.py @@ -40,7 +40,7 @@ class InputSettingCard(MyGroupHeaderCardWidget): self.setBorderRadius(8) self.btnHBoxLayout = QHBoxLayout(self) - self.openTemplateButton = HyperlinkButton("", "下载模板") + self.openTemplateButton = HyperlinkButton("", "模板下载") self.chooseFileButton = PushButton("打开") self.chooseFileButton.setFixedWidth(120) diff --git a/ui/pyui/defense_ui.py b/ui/pyui/defense_ui.py index a1dfb91..4b411a9 100644 --- a/ui/pyui/defense_ui.py +++ b/ui/pyui/defense_ui.py @@ -25,7 +25,7 @@ from qfluentwidgets import GroupHeaderCardWidget, PushButton, IconWidget, BodyLa from module.worker import DTGWorker from ui import MAIN_THEME_COLOR from ui.components.infobar import ProgressInfoBar -from ui.components.widget import Widget, MyGroupHeaderCardWidget +from ui.components.widget import Widget, MyGroupHeaderCardWidget, NotImplementedWidget from ui.pyui.sub.defense import ODModeExportSettings, ODModeSettings from utils.function import open_template @@ -65,9 +65,9 @@ class InitSettingCard(MyGroupHeaderCardWidget): self.sBtnHBoxLayout = QHBoxLayout(self) self.qBtnHBoxLayout = QHBoxLayout(self) - self.sTemplateButton = HyperlinkButton("", "下载模板") + self.sTemplateButton = HyperlinkButton("", "模板下载") self.chooseStudentButton = PushButton("打开") - self.qTemplateButton = HyperlinkButton("", "下载模板") + self.qTemplateButton = HyperlinkButton("", "模板下载") self.chooseQuestionButton = PushButton("打开") self.chooseStudentButton.setFixedWidth(120) @@ -345,7 +345,7 @@ class DefenseWidget(Widget): self.stack = QStackedWidget(self) self.menu = SegmentedWidget(self) self.dpMode = DPMode(self) - self.doMode = DOMode(self) + self.doMode = NotImplementedWidget(self) self.addSubInterface(self.dpMode, 'DPMode', '书面答辩') self.addSubInterface(self.doMode, 'DOMode', '口头答辩') diff --git a/ui/pyui/picker_ui.py b/ui/pyui/picker_ui.py index e05dfdd..7f018ce 100644 --- a/ui/pyui/picker_ui.py +++ b/ui/pyui/picker_ui.py @@ -36,7 +36,7 @@ class PickStudentMode(QWidget): self.vbox.setContentsMargins(0, 0, 0, 0) self.btnHBox = QHBoxLayout(self) - self.openTemplateBtn = HyperlinkButton("", "下载模板") + self.openTemplateBtn = HyperlinkButton("", "模板下载") self.chooseBtn = PushButton("打开") self.startButton = PrimaryPushButton(FluentIcon.PLAY_SOLID, "开始") self.bottomLayout = QHBoxLayout() diff --git a/ui/pyui/sub/defense.py b/ui/pyui/sub/defense.py index b1d3fd8..c866754 100644 --- a/ui/pyui/sub/defense.py +++ b/ui/pyui/sub/defense.py @@ -25,10 +25,10 @@ class ODModeSettings(MyGroupHeaderCardWidget): self.setTitle('输入选项') self.sBtn = PushButton('打开', self) - self.sBtnTemplate = HyperlinkButton('', '下载模板') + self.sBtnTemplate = HyperlinkButton('', '模板下载') self.qBtn = PushButton('打开', self) - self.bBtnTemplate = HyperlinkButton('', '下载模板') + self.bBtnTemplate = HyperlinkButton('', '模板下载') self.qNumber = SpinBox(self) self.qNumber.setRange(0, 999)