From ae48a9ed304b6ae6e5ba3027a9b3867ec1e29d12 Mon Sep 17 00:00:00 2001 From: key Date: Wed, 19 Jul 2023 21:52:43 +0200 Subject: [PATCH] decided to switch to python --- tkinter/address_book.db | Bin 0 -> 8192 bytes tkinter/database.py | 162 +++++++++++++++++++++++++++++++++ tkinter/icons/icon.ico | Bin 0 -> 67646 bytes tkinter/icons/rocket-64x64.png | Bin 0 -> 1298 bytes tkinter/learning/calculator.py | 63 +++++++++++++ tkinter/learning/example.py | 130 ++++++++++++++++++++++++++ tkinter/learning/main.py | 44 +++++++++ tkinter/mysql.py | 25 +++++ tkinter/setup/setupEnv.sh | 9 ++ 9 files changed, 433 insertions(+) create mode 100644 tkinter/address_book.db create mode 100755 tkinter/database.py create mode 100644 tkinter/icons/icon.ico create mode 100644 tkinter/icons/rocket-64x64.png create mode 100755 tkinter/learning/calculator.py create mode 100755 tkinter/learning/example.py create mode 100755 tkinter/learning/main.py create mode 100755 tkinter/mysql.py create mode 100755 tkinter/setup/setupEnv.sh diff --git a/tkinter/address_book.db b/tkinter/address_book.db new file mode 100644 index 0000000000000000000000000000000000000000..002659d05bf0b6d3fca00f2b849ce17a2c53fe57 GIT binary patch literal 8192 zcmeI$K}*9h6bJC669$4z@KA<_J#UI4j(q{==*jKiIuCl0tbMb=b{k2?+-~9*5x{RD*l1=rTKI^_<5jMhVaLtB`yHTD`I;`2K zfgl()amyGriqLddS1*8opdhP8f*>x)D!4{L7Eu9lYns0E|L5NG>ecJ2>gw+5Gp1VaNdH9x+qdTsyGq{fzSDl-^by&9MlLh9Yp%AJ^0>rH6_KLsTwhe_0P)z~u!#*j$xOfK$ENbq6G463flf3Pmz;oa^s)6!=^%S7 zDXw>E8Hb~-n?@By>L9N@zua)Z@wLDmf9v?|m3!j-*iDz3S60k7JGZ=GcE0qyC7$Pk z5Z^Auvwi(4v!?nkQ$4E4#77P^)m8@79@vR=Q8q;f#7YL{Ci6Y92tUQ{FFiR5{%&yi zA7Z($yri#r;{UEOhZ+tV`)hQ^+#ebn4@sok*R2#8aOt2P5IuzBg&?N4pa-_xaRB@z z?&RyYK(5Xm)EGxOtQ&Kx*}v;8!G$u=c<4|&QiC~kuwK6POw}D``o(?3=0KX%4!z%{ z6S}IW9hfT#08iECAAobQ`=snc?=QZsOz_aMDS>wUNBQD!+lwnj_b?qula~L54u45+ zuJV7l$CDBNKXelQr~_E{^x&Uc=|nq+)O zSr@YZ&UbkzAm%lr#3#shi{~4xDJ|+|$hAE?aqCA{+{vqG{MzFp@zDb#@Taj&)dw^f z^drzrkXPr@&tuzvm!bXlXlJ(nK0&(92K56C1bqiG?ev!Thx6&XerV`7C7*5QTK9;d zc63s?&qKM1#)r$bQ^3PVL3=^OJ1wyej$PJi{-1Q|qD{C3G!b+(h`8r3D7`llFFhXp zSUo;MO0e_okvDlWpyN?yK8N!-h$0N!cuAqvb?_4&&Oep`*Ixpi&w9S-NbuUF6DqT6AD}K6EHZFd;}4w}hdl&4DGDM#rh~{k=i`BIAH0l> z7-%Yn_0LF^ynk6gQ#GP6EryCWeYcgDS${rlhuH9b@{a94^8ETu;%P1odcShm07KuD zlLN*>Ip&cz!Vf{rYc!6!?{NM(KB#Yp^?ia@rNzQS;yUl@p=RmCb3wmMOG|$D3-iR} z3(O-|pJA#-Cd+{B3mjxBE!{lz|f^3T`7Z}&Iz$p?Fr zJcRV=?%n>n+3;wEnSIUArH_v?qjd@6iVYuN)=#<8n2pt@@i}}iQ+jZJ|MEYXWs}Ye z%7E4b$E)lg=H*|?0C@2)pm!YpQs1-O6MM6vTJS%(dWy+Jhn}5gmi+FQX8NTkq5N7M zPVA}Q=Zrhs?AZLQ#k?`mKO{b54ZCCg#|O-s_?_b0ll0iST=W3-`?lGW1pE3`4`xgc z<>Mga_Oa{Eg6s@bJ)k<^M#RlJpa8OU*opx1uezV@df~B@HPrXi`Q#tVK5^$U74e=~ zTM1dY0oeCbf2`~%TLY~oq>Lw zM7p2@9vydrn%} zo(X&9HJ_P(?U`aH@_p)V+H`ZTJI8#y?_G<118~pc*9h6rzT}MyVz3#!K0c8xVkvqF zGM6cBB9|{rH*e3q*;GPq0{Aa>_)Fb)I4Jh0LDe&+2Bs|E2xSz@0M59kBe&$sl>E5&A%wgY5~HXZG|#^|FM+ipFT|Lf60Fp_z?ru!T-@6fAP`m%R&2oB<)@=-}H+YI63$V&ff=7*JfS+ zvko>dRG6o4ALi*;;#6_T@#e`tj}tf*#{{<7o#}hKwyu>nf!cyhBg^u8i|#ayusIH< zu>++3Uo#c;|No?_|0f|H;?I5}%Ln+ss?Zj$!gbok-Q_1f9=7dm`#zs-eV2D!lQFZZ z1CspuwEx+L%4q)sdzQob*Z6cl+g+&l-+JM%ZNlHaY;DEIZz(~XCyM?j_Ff&3rY*qs z0qy_gP3?cNC6IsWJMjUC-wU``ldL{an;2u=PYtygFpss+YqhX(nYZ}mr$lNl?a%z3 z0J;gpHs3N3$4zVnN%@zf*Zv=1=3SGn{eP}mJmH)qy-(lHOtkMm-uIp@=uK?B?8-l% z5?c|+7w1fov88NJFm3cN%)RP#Y2UHUk?faX`~RF&?SI9dKA`2Gr6A^e3g}|cm#q&} z>I6>)sz>w-r3_Gq)xghDGfI5jTE;nF<4KV6qS+(MTPFV>>tl_Nb|3wEwE1)KQ~cjp zvsCI7)-C!i%0R_sseO_u{D0ni`o8a|J^|K$*TXN=t9JA$#NU&FFbV+D58rN*ey8tS z{krNGXM0GA*HZF{GLVV%JzMvmAbvgKuWh;3%7WSe^c}EH5ucDtW2W@*o~9|yQS;2B z_H$_dp$`Wgh3nLrdD1r?G9LkPpN@HYNWYf*GjUFyDDJ{b>u+!STn!hu)X&6;K3(~> zLHF~0#h>H81%F@p7yJ>XOthN#zN=G^2kHSWAB!>GrJ!Pz%z0s-c&Jo>)A_2u*!R8N zVMKWsoZ3ELL+5#%=#9lDCT#aVa>Kc%q5e}V1190`a~HBcsQ%yj#BA#mR;=)yD)^Ks z6Rn?b((HVa>%l8)H{m#ISYc>npvvlfwriOF-w|_=_&%kM2H)B|UxRZp&^Ft?{%JGo z*F$AKhF|Z#zwK4Qxh-{omj9JgCwus79rH}=cJuDvw}@Z4#dA!un@_R}JkxO_dDF)X z4h{ZDH_ATSGnf-sQoIo)x}Utu<$MkL>iAoF#}%G_rat97u=VrNM}wc1VF|S4pNpHm zIjT=M#GRA9)Ft{l_t`@sfe82R0E0kejco^EI?T zHhaD7ffzW^GW6QYg;)o`>uY!8cR22=k6Cutug#v`Se%DfDZ4?8f$=*sPRUP@48%4(DsgeE;Ww??%JE8e&EL@8nMO z0@rS!UAXAB(PrHvQ_bI>T`p}m`gS&m?78xMbeTku4k zK%0Q$JlRKV{Wl21z9)HOKV99S@+0r#8t+q%*vFvnw*Hvb|06y!eADy);2diog=akp zj%Rpqbdvw~r^th@lOp{cET61f<=7SwH#y~}2i(=g~sRu%%15|F^agM`Z z^5xCzsA_&*N2WOz-Qiw_abl_m`Z^xwhX#DB|Hbx)?&sY7Jr4h@$8~aC@8LproM_s4 zBI6zYGEO!uGJrIz|6k{Iv}jznj_W@hj@~%&)bm7=#)*dz|3X*xTQ#raaKOJi&J*#K z|5nZGI2>@-JbL9ni+Lg;D*x*H>#6^nv1OW>Co&;X|A%L85a+aG?2q;V&UJNwXa6@l zuOq|U>h56oYaTM#|LP+<(cvE|``hC*rmLW&VV$ z6A`ZVzb*gPcje@_%E^G{t;hd|`KsCa|H8IrV2wA=a}ee)oQ!b*gFXlRUrN#g?33&9 z|I;t(CoLZd|G%3%85Y}*>7>6hR(2|Nzxn}A!#RE0%xk;$|Fya=E?0eeEr};X{~y+d zDyZU~M;uEHeun8MbG>B@xYPk0!``(2A7eDycfSt*_<*i>o_+s6=YY)|7M?y}*I&`T z^FMSfO&E`@82>Z<^6=;Y>MYIy#JUgE|Lr#aL&wpD_1KNa|7qL5UFUzaZR~AZ$L{9h z{lxg+H2aAp#{Y(B4k*gJ+I{_TPMgn;{mt?GkFb_|f4X(-ayJ|QulNsWf`5+ZfB1PB z#`A89zv};Q1ApKAzueFN2zMQj(ErWN{|MRqKlJ~2^M3>LKRRx|wyv%Zx~u(1zctEz zGwr_|&i@Eo8!)@}-)^k?!FBP(2NW+I5*inf8~>?&!1Vt#UH_xq_v`42J|BOY()xdN zp2Q6fd+ZkxuK6EKcg^sm`5*1N{!gfUzJC93vj3NUarKce!MPN&3nY7AA+J9G{nf{Z)EM}%A)ni0o`|j$ z;ZF;3=lFD;)2CzA{m;lbp2;*XB}Kn(rhH0&7~&I~ox!ST* zL>5@T=yQ|_zPlvtUL-Q8(!GlmW(J5SPRmNQaK=O0oZk#=&v1%yU%M{l(h9)Rzd;Z{}fNJ3QRjtK7yg z9+3WvTId2ET|U`9)HY(P*8gtl91&SB9P9S4z3+0jPl%lZ%(>_bCJi$U2kn}HY?o`> zoa+cacGG1tUtR1>$N~2lS$qHGvhPH?eL!SfC)R;av;W5=(LAVA4e}@hp^vb`U^PcYY&Ud)( zFXQ0a^Ndr+a{G_oxb7_GbyUMnj)UyFnRcw7lMkySoL=Bs>UCu(Lym{a)36?qN9`vl z!Z~$gyUr64{GqFt-E^+lZ-PJScCO*MbMte8yZYl9&~x6C_1~rKX7?vy98$*9;BRHE zW&3~BjqOXkl~@l*UCHr(wRS8J!_=9sj-Wmb&$xh~oFX5Je}~Ky>y+}JdR|A${eQp@ z4||OH$#Z)pu+7AA;74&C;Mx&lHxYm3oxC%1boguq3X z|GJ)JQvDB`V8NtT*8l1E|M)HPPTUGGHdcxS=lFA+7wjYK148U&?Nl8%%{C(E(ar~* zhi8uT*-@T7je8Q;^pPi_F2NYgU!h*XSX{=5dwh;Eqjr}bc}>=srhLVrXFBTV@~i1@ zvj1PM=ZQ3D|8pPt58vA@^#K31gZ-~<{o}!N;-9a)X1IK0f4S!F{SimjiS!TYdwP5W z*Dk*8)|0reiek%m#l9BVfGi&wVn?w4MrL zex>~fJJId`nQ8xzZ0A}eKgYIv`u6{+iT3}PQ(M{oPr3gGab*4$fskL>6P{z^ff?F< zBL*m5JgUE(yim+}WY~Z0G4Sb2ZoH)}N4|FUoU);jTH2K*#s7f!z7IMJR0g^ZG!8Tx z#BZ^WhTnx8(EjWgn}YI4or6564yZsH$RqWGx7$3C4)*_9nGWp#tG1i+p8g-u7Z85g z@xl6pb)H1R2f^zqPh3~&YarrBot|HdvW|8Fd0GUbf9W-ljmz?vJSM4Zajo&=*fzs4 zS~sSDE{l2ExVRsf+XE`E8fiwm=5zS|3J}xA{E4hvJ3Y5+MY(S%9}>sh`TxmV#Yy>m zKCY3+p6ynLdqYLIVYdmzMqJ{Z$8y|+Wz_`>2c|$9Bc(m1Rd>kYyN`! zY9cjbPLn*7mGKhU+di{WP`R=VCaZPK^au8=j!xt6I<2Kdg$pdE?# zMGhV2=<9&YaPM=@x#9YkvZlG++g4@t1HAihAf_XlW0*5W=XfJL!MDX0t+=qC>=%jf zmqC3%gF*BYsC<*Z!UOu}>7#vR#eBOatE>n6eCyX|4UQ+uZoCfrb1 z&f%3jp%1hu@&M-X(C*cr(*;@|)Z#tCpSW{P(x=ORPuSs?toPO?-}CxrS)*9jrFZWT zN0Q@t-$Q}9=w(AR0xfO>&_hn7FRT)MuCBjpr4%Kd&K&5tEc zjMq&wUt@|(C;N3MyLs_3;3sWcl>Jmc_Z;)dvS;&#GO7EFa7}Xg`PLg(Ib3vWsr5?( zZ@eo+?72Si%&|W;Z#=Wa!<;AT&*q-k+#{29g0KAVhYyPVaKiIcY3;0QNR#Tv0WP1N zHlIX!n5+33zPz!mX3IV?gx*fKkDcy2vh|5MQb(vgM|*&F5X<%l?`*eXBYPCsJ?}N` z+&9a&PQKcITTl=8a&>WDXJMV{yFMN@#lM5+lPC|{0sk``{tcep4}0HVZY6+!TK?aA z^X0@i2Gkd{2WDJxn&Dm;{Apbw0sK?Bd49&dVh1|8(YlLv70Z6U-#$r&M@L^nn$!;9 zd_vb=rT*u9l2eoNOMKdo68b;Qe2x1Z4^ii5*M=s)-8-k@$ntOTN8SCzJ=Y3!inrnj z0gzMfO*V7v>7vJ3_E~3e4}t1IJ z==p&?JD~rDpbo%(C9eF>zUJqy{Btj>gQD}bUz0v0i64Fi@h`ZxBCb_}obE?IWC!*E zX2m1=iD^qCjUe*)EfDh}(cV2~?)AU0cAsr8 zXxV4_xi34@F0z}}O;lMp9m=^*Q7*5|XZ_vlCOzawy}{iesY4?p1Pa(Jp+{rEUYzOuIX3HOaj%lP_ilfTF1vppRMdg5b3X;k> z`6{I4g*;PowvhLXdzSGARZ-JxC)#2RNY=5*9@t)QJ-@`fmh>W+9 zSaH80?p>ysYdy|!sq=n&zP}x3^M*W8C(zGZe&LVc>-~`&#b0d8J)hIGuRtH@+-<6vm;@VRn;g>rKA2OZOKSG}kF~|@aEoEd6M}W z_zrzj5omZNV_r0fTU3}frADF<@rki~R&>eh_`;~e} zYwK&?D8D?vFFw+fKb1ilU)qt_X8SFq7vmt&x9$AHGcPKPRF;X{(srHZId5c?%4kJLvV z_LZXxv(1k8oYMgs$G;;!+LB(HRS(R(@^sPVd*6P;%)Ra$>~+sRAiK|{d!Fwk>O#K^ zh@2!nt2*Fsc;{bTdGchyOI#N_adm*F2jExr(!8OcZMPslysy`Z9r@CrZ3XVz$DjBK z+#asWAP3Y1tPk+4@}>yqg0Zq8UW$D!O9#S6_Qq-{Zjo7|TE0hHHTLy$-{4X00QCik z%;LI~W7&TWW7QcB^!-@efj8?h`t~?pU3I^#vxmId`D{sjzp4keAkO~)d3@9ScEuy- zLo%)GJ7Yf!&RGV@J06KUkJQV&7r;L;)|+*y)~D11DexcU;$U1FFTX=VojDNkv#&Zk zTR+H4j>&WJ^GG?0#%!AJ!nt1#1z%!IT_E>-<(_iQYqEzSbOQaqD<7IC`(-^xUE*{d<53x)+%XN_xKux{!*cHO&@TEv7d)s6jCp|` z%XhlqFGxG_u;e9ubn?| z_tqE94D=6H4TlU^-NAZ>#QK2q4RVpqPK$%-2X#sO>tH{)wUL-c==`F5H}|s%_AKkv z>6;hV8v6QPn023-Gwy8LR>3`%U)EV1AI6{c_gUYNEAmMP`meRV+x_x7Pp>#%pp`jm z-*y^yx%hBb#lHq)TV$Mz9p{(_ogIx07oX7sNOMxTC-&U8eAA*D!BBNN`)=8O_38mU zM;(x;({x|;Bd0*%U1QOv4_~*K&bFXT^c^ce(Ok$1(mkU9Q{@!rX6J zBRwtln;rI|zkU7qGVViUAmR6AUr|H7-J4#0MMegl(O7Y=kw>sQp@eC>9>k*(6)g12jC-m;+}Dk z0XK);$xCuyxU~h;MxahvddFBh$HlgLwLKWi1rD7RM_0n1eQ7Q|w%m^@j#dqqYg2;Q z)2^dWFBSGG2lVMD>3=If(k|q?90&W(s~cQt_x1m~D?Ct7yuNy|nRnxPLI1Iq|5crZ zT`s=cRq&6MC6{}oD_VQG)J++%uM?ycZ)gBd2dsN!s%yU|`SDn0rS7I4pzoi)e)=;g zM>{sIF?(LyWOl*ke{I#{hT|654@g<@jRB($VjS8IoSX|BIx7z3gJrE#?f*c3h4^+V ztPSuG(w3z26XiZV_Vnd&+`hEgp(k7%T3&e+-L3a^tUt#_P#!23v?uBR(Y_${8@YGo zeVk86d!ScmVV8^VA`hL4fAy$9xi2k3xu>sC=HjKsen|j(wAEDyti^bJ5Bo$Pm0~{+ z@p68V#_P!e^?_gvd0~4&!g5XIhvl7ZKE<8=j$>mb1L)U^<^qS#iUaxRH2kZieJ|f< z8l>F2HSne)tQgt0x2x~jKhK}yP5X>?8-LHw#8^%EeXOr82{*=dr^_pSHteh7HR7t+ zD!#;6Nw4X%JaV2D$JR5=^qYpp|C>t2Ts}Hn|2HZ3C4-`|D`b9GdhD0Z6r59G|6JWY z{`R@zMf`Yvo2(guzKGuU^kZKL`zS5}y#ONqd?pp?J+%4lasI%SsTBaGk z*{&5;B>hkbQ`X^6z_&|f-4Kq8_zkEMv>dbwv;xHb@moP$2jJ*xv`ymZug1CWeZ+yW zEMfj3Kbj{Vmx0K$ob>;u;!9N%-%fFKhMmVW&3(H?*sqD-nF;%wXj_5`&=-zANXaYn z$+`yX$;gr6R7u4=B$jpT$!L8N)b;tCckSk0WA0sH%J;%_k$DGoi2iruCWPPkrquUX zua@C*5amv=7k{lQ_ghkxdp8c@nb_@_u%CeV7`K*toI_vRIpn;q#Juwv;v20i84Nj* zaS{yc^}HI4{i(U+Oo@Z*1f}}fwfym%wP_`PE?$wHE_~j6|G&(swd?(*>Hi;${E?@e z&(~ajSstTvOT?#Jj^|s9{c7~zvX9TF^BITQ`4e!iX;BQDOH*_ADJOZ=Wso6`MSvdA zpBop(?~$Bt!G5kGun%0CJEZ)RU*yl!vws?y_|;OLPX{Gqk2V|o>9#C;xT&q@`edIj zzeTWTAHRFwe=Nf_#vNr}VJ?0yKI#s^7GWOw4b%-uKFcU{fU9SUSPs4qDg+gEaT9+bClKtzR{1{MVIupKEnd4`j-(ek+FO0@xQ@?3V|y z7fG=HR!*Iq3VSX0a}g)U=Q9n(piJp#$vt97EQzVe7LHnGL=G6XwuY=pbR)vAf;3%z z`3%)LWq^J$uIXv1uN_Zkv1@Bygg@Fp%W}WLMTI1kts&BU^ zzZv%{pc_G-cWY6o4CwJcac?V#Y16hN-wOlL=b>r#cq_gz&YAI%%b)j*3p0<5Bb&Uc ze?|LJrQD~&UVS^;*RK+PY@ogmrh(yXzTcW>7`O6=7z1n3{fhlJaP4gnpJU$uzG26m z&>z)9O?ja8w=MT`Qk46IpYN5Y<_Z3Fmk;R_UJ^@-sn_pAtiKLY{m;5bu@|}KI79X= zFn>Li%md*I`d9>ex1Ko1-vxi(oIK3y;(Yz`3w|K=QAhHVX_fKd^hfzH#yNdN#J>$k965C81H{V0x0p@6tADn-;?Zv;@a*uJB>3%8$@4oSpS@FPl z8K2EK+MAbx8NNddIlnkXA29JI_BsX~elyHPL?7bZap#zQJKnHaa_yFM`8(XN>skRB z`OsNBbl=^_c|;gbD*eG$57368K48Dna(6Ck?Qp!nD^Jar?C3aC=COwYJdkl$>Bry( zqYXlAZU3U!nZ$n?hdEPdEJjElG7nyv#`;_!FAAI?K|J`bPo%WGB$mXK*wW|A z@gl@L!q!ba2O6A~Xy?>VK)6>T{2}lEVlct049ChqU#{U+h@-UIf2+Hm77 z^8T^G4sZ=eg`W$y>W5q-Yg z-j7Uk&o>wDo&5X(4NtP~uRhA%zk9q~D0jg~!Ey=LXgG3_gwOQCwzt`PJ~EW|8wE82(P+eoMnPzQp%~;h~J*lzZQ|;oe?&wtPPkmisNpPfOFA`uRdHJ;zFV z5@DO3K>AD~Ea?yCuLbG1-#v-2)t)%6D2(D8LseaI~>JPrh`>J2oy0GdW4V#_(Ky-YnuxLTwebJ&eZ1}v~ z7kwF(@Dcc)ar%?rmvBAfFE9*$k@ubcWjLQHaOE=tG82PWSnB54= z_f278r1wy>4q@icn7xIOuNxEd!jMt0eh9*Oa$mxYcO{1p^+s6g3+k9-O?_c<_`rnZ zuw`>1K7QW+K0ogd^Ybo!jGv$H?P?W<`S~*~Kji!T{G`ZWFMfPJ@36o9|`^>~Vih^dK|NQS&5%)-JXOe93C#Ka_>HE9sopn;OtF68!GCHYS#2zR5uUWwpvi1ZmIm(^S8Qw z(Dqe|`e=vBk3HwqrGvJ!64Vj(j}ixD>R0OYy6mcD6i|nO{lLN=vd;$QWm)!4wN}-L z`ce;HzV+Eyhi#3j3s9E>p8`V@6g>mn8bUaq-m0rq+67dAJ;0&}@fpBymSyj!w5e9q z%@Iw%`59FgRcT{oEx`Qq?*ZoYp=Jn}QDs1^EC#4s$Q{rxmx0A0gwqLhjia&_&}cN? z0B%g6N+8R!?7alK#!*QNQ11jjFUfWpI1LO_?x?fCf)K)A3C#N!rdC++SeLZ3zz*R0 z5W?aR!cD*e;1zPGv||>qDXobWp$@4(b%^TUtG9HK-B7Fy+sVFNXFZ}(S9clK?r+LB zQ{AerD@Kg5-=FI;B-XY@h^Eb2f9yHllxL)+l^j%uinLk9(zu}&TG)fK>D%6Ew$07 z56Gka5U>JRm9UJSN$r4MThuVHp?D@rQkzqEflhPzl!TPZk~yH5&bAxhQ`5`Na?d2$ z4^U?SyMc#O=qq7uqtTe&XfzIGS=M)J=zBjvy&2dC)P16}AJ`T`_^lr$eL2AVRCh1= zdVLU_03HY-oQhQt?SNv}=P)oWR!1Vv0C$BDevA>03WCLK?o9??dC0fZUXK-y9R)T~ zf1mHhMs-&JQjg+gBsE-osfMexZYNu8QoMLjtfzu&``eHx`0pQ~p*@}pcN&V~x^cn{~ zBR?#i$g1sY;34vs)(d4P(dkiFmF(VT>RxqPk$<7ON4?S||ERia>d`h|bSjq zb9SoFs-=e->TT+)>edeFE7jxX7pr%xGyADS9XCZ+a&^SG1bhe_0=^`_E;F{9d^`Ec z(cMMf%fOV@7?PSg9IzHR7%4s_gm9@mTRfBathpYpIbhHR44OI|&>F literal 0 HcmV?d00001 diff --git a/tkinter/learning/calculator.py b/tkinter/learning/calculator.py new file mode 100755 index 00000000..370a807f --- /dev/null +++ b/tkinter/learning/calculator.py @@ -0,0 +1,63 @@ +from tkinter import * +from tkinter import ttk + +#This is tha main window usulayy called Root +root = Tk() +root.title("simple Calculator") + +numButtonSizeX=10 +numButtonSizeY=10 +calcScreenSize=50 +buttonPerRow=3 +paddingX=10 +paddingY=10 +buttonPaddingX=50 +buttonPaddingY=20 +boderSize=5 + +#FUNCTIONS It doenst matter if this is before the decalaritions(PYthon Thing). +def buttonClick(number): + screen.insert(0,number) +# Creating a widget label +#Labels +#Buttons +button1 = Button(root, text="1", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(1)) +button2 = Button(root, text="2", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(2)) +button3 = Button(root, text="3", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(3)) +button4 = Button(root, text="4", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(4)) +button5 = Button(root, text="5", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(5)) +button6 = Button(root, text="6", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(6)) +button7 = Button(root, text="7", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(7)) +button8 = Button(root, text="8", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(8)) +button9 = Button(root, text="9", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(9)) +button0 = Button(root, text="0", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick(0)) +buttonPlus = Button(root, text="+", padx=buttonPaddingX,pady=buttonPaddingY, command=lambda: buttonClick()) +buttonClear = Button(root, text="Clear", padx=buttonPaddingX*2,pady=buttonPaddingY, command=lambda: buttonClick()) +buttonEqual = Button(root, text="=", padx=buttonPaddingX*2,pady=buttonPaddingY, command=lambda: buttonClick()) + +#Entry +screen = Entry(root, width=calcScreenSize, borderwidth=boderSize) +screen.grid(row=0, column=0, columnspan=buttonPerRow, padx=paddingX, pady=paddingY) + +#Showing on the screen and aranging them +button1.grid(row=1, column=0) +button2.grid(row=1, column=1) +button3.grid(row=1, column=2) + +button4.grid(row=2, column=0) +button5.grid(row=2, column=1) +button6.grid(row=2, column=2) + +button7.grid(row=3, column=0) +button8.grid(row=3, column=1) +button9.grid(row=3, column=2) + +button0.grid(row=4, column=0) +buttonClear.grid(row=4, column=1, columnspan=2) +buttonPlus.grid(row=5, column=0) +buttonEqual.grid(row=5, column=1, columnspan=2) + +#Main Loop Equivalent of our main(); +root.mainloop() + + diff --git a/tkinter/learning/example.py b/tkinter/learning/example.py new file mode 100755 index 00000000..c10f4799 --- /dev/null +++ b/tkinter/learning/example.py @@ -0,0 +1,130 @@ +from tkinter import * +from tkinter import ttk +from tkinter import messagebox +from tkinter import filedialog +from PIL import ImageTk, Image +import os + +########### +#VARIBALES# +########### +colorBackgroundRoot="#06283D" + +######## +#WINDOW# +######## +root = Tk() +root.title("Icons and images") +root.attributes('-type', 'dialog')#https://stackoverflow.com/questions/35830851/how-to-make-tkinter-window-floating-in-i3-windowmanager +root.geometry("1000x1000") +root.config(bg=colorBackgroundRoot) +im = Image.open('/home/key/Documents/tkinter/icons/rocket-64x64.png') +photo = ImageTk.PhotoImage(im) +root.wm_iconphoto(True, photo) + + +############# +#DEFINITIONS# +############# + + +pizza = StringVar() +pizza.set(0) + +RADIO = [ + ("Pepperoni","Pepperoni"), + ("Cheese","Cheese"), + ("Mushroom","Mushroom"), + ("Onion","Onion"), +] + +################ +#IMAGES & ICONS# +################ +global myImage +myImage = ImageTk.PhotoImage(Image.open("/home/key/Documents/tkinter/icons/rocket-64x64.png")) + +########### +#FUNCTIONS# +########### +def myClick(): + clicText = "Label 1 Entry is: " + myEntry.get() + myCLickLabel = Label(root, text=clicText) + myCLickLabel.grid(row=5, column=0) + +def radioCLicked(selection): + radioSelection = Label(frameRadio,text=selection) + radioSelection.pack() + +def popUpCLicked(): #showinfo, showwarning, showerror,askquestion,askokcancel, askyesno + response = messagebox.showinfo("This is my INFO popup", "FYI") + Label(framePopUp,text=response).pack() + +def newWindowCLicked(): + top = Toplevel() + image1 = Label(top, image=myImage) + top.title("The ROcket image") + image1.pack() + buttonKillNewWindow = Button(top, text="Quit Window", command=top.destroy) + buttonKillNewWindow.pack() + +def openFileCLicked(): + file = filedialog.askopenfile(initialdir="/home/key/Documents/tkinter/",title="Selec A file",filetypes=(("png files", "*.png"),("all Files","*.*"))) + image1_name = Label(frameOpenFile, text=os.path.abspath(file.name)).pack() + myImage = ImageTk.PhotoImage(Image.open(os.path.abspath(file.name))) + myImageLabel = Label(frameOpenFile,image=myImage).pack() + + +######## +#FRAMES# +######## +frame = LabelFrame(root, text="Exit Frame", padx=50, pady=50) +frameRadio = LabelFrame(root, text="Radio Button Frame", padx=50, pady=50) +framePopUp = LabelFrame(root, text="Generate PopUp", padx=50, pady=50) +frameNewWindow = LabelFrame(root, text="Generate New Window", padx=50, pady=50) +frameOpenFile = LabelFrame(root, text="Open File", padx=50, pady=50) + +######### +#WIDGETS# +######### +#Labels +label1 = Label(frame, text="Label") + + +#Buttons +buttonQuit = Button(frame, text="Exit", command=root.quit) +buttonPizza = Button(frameRadio, text="Get Ingedient", command=lambda: radioCLicked(pizza.get())) +buttonPopUp = Button(framePopUp, text="PopUp", command=lambda: popUpCLicked()) +buttonNewWindow = Button(frameNewWindow, text="New Window", command=lambda: newWindowCLicked()) +buttonOpenFile = Button(frameOpenFile, text="Open File", command=lambda: openFileCLicked()) + +for text, mode in RADIO: + Radiobutton(frameRadio, text=text, variable=pizza, value=mode).pack() + +#Entry + +########### +#PLACEMENT# +########### +frame.grid(row=0, column=0, padx=10, pady=10) +label1.grid(row=0, column=0) +buttonQuit.grid(row=1, column=0) + +frameRadio.grid(row=0, column=1, padx=10, pady=10) +buttonPizza.pack() + +framePopUp.grid(row=1, column=0, padx=10, pady=10) +buttonPopUp.pack() + +frameNewWindow.grid(row=1, column=1, padx=10, pady=10) +buttonNewWindow.pack() + +frameOpenFile.grid(row=1, column=2, padx=10, pady=10) +buttonOpenFile.pack() +############ +#DISPLAYING# +############ + +#Showing on the screen and aranging them +#Main Loop Equivalent of our main(); +root.mainloop() diff --git a/tkinter/learning/main.py b/tkinter/learning/main.py new file mode 100755 index 00000000..15570267 --- /dev/null +++ b/tkinter/learning/main.py @@ -0,0 +1,44 @@ +from tkinter import * +from tkinter import ttk + +#This is tha main window usulayy called Root +root = Tk() +root.title("simple Calculator") + +numButtonSizeX=10; +numButtonSizeY=10; +calcScreenSize=50; + + +#FUNCTIONS It doenst matter if this is before the decalaritions(PYthon Thing). +def myClick(): + clicText = "Label 1 Entry is: " + myEntry.get() + myCLickLabel = Label(root, text=clicText) + myCLickLabel.grid(row=5, column=0) + +# Creating a widget label +#Labels +myLabel1 = Label(root, text="Label1") +myLabel2 = Label(root, text="Label2") +#Buttons +myButton1 = Button(root, text="do not press", state=DISABLED, padx=10,pady=10,fg="blue",bg="orange") +myButton2 = Button(root, text="do not press",command=myClick,fg="blue",bg="orange") + +#Entry +myEntry = Entry(root, width=50) +myEntry.insert(0, "Isert Label one's Entry") +myEntry.grid(row=0, column=1) + +#Showing on the screen and aranging them +myLabel1.grid(row=0, column=0) +myLabel2.grid(row=1, column=0) +myButton1.grid(row=3, column=0) +myButton2.grid(row=4, column=0) + + + + +#Main Loop Equivalent of our main(); +root.mainloop() + + diff --git a/tkinter/mysql.py b/tkinter/mysql.py new file mode 100755 index 00000000..ca112c0d --- /dev/null +++ b/tkinter/mysql.py @@ -0,0 +1,25 @@ +import mariadb +import sys + +# Connect to MariaDB Platform +try: + conn = mariadb.connect( + user="root", + password="KyKvMdRt586591!*", + host="db.keydev.me", + port=3306, + database="minibase_projects" + ) +except mariadb.Error as e: + print(f"Error connecting to MariaDB Platform: {e}") + sys.exit(1) + +# Get Cursor +cur = conn.cursor() + +cur.execute("SELECT name, description FROM project") + +print(cur) + +for (name, description) in cur: + print(f"Name : {name}, What: {description}") diff --git a/tkinter/setup/setupEnv.sh b/tkinter/setup/setupEnv.sh new file mode 100755 index 00000000..bed66fad --- /dev/null +++ b/tkinter/setup/setupEnv.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +sudo apt install python3 +sudo apt install python3-pip +sudo apt install libmariadb3 libmariadb-dev + +pip3 install mariadb --break-system-packages +pip3 install pillow --break-system-packages +