From a66495af5203d6184ee9a15e7d8c7ac92a53cfb3 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 24 Dec 2024 16:25:50 +0300 Subject: [PATCH] =?UTF-8?q?dev:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8?= =?UTF-8?q?=D0=BA=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=B4=D1=83=D0=BB=D0=B8=20+=20=D0=BE=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B8=D0=BB=20=D1=82=D0=B8=D0=BF=20=D0=B2?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=D1=8B=D1=85=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D0=B2=20=D0=BE=D0=BA=D0=BD=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/controller.cpython-310.pyc | Bin 1584 -> 1584 bytes .../__pycache__/mediator.cpython-310.pyc | Bin 1311 -> 1311 bytes .../__pycache__/monitor.cpython-310.pyc | Bin 3053 -> 3069 bytes .../passportFormer.cpython-310.pyc | Bin 4347 -> 4675 bytes src/controller/monitor.py | 6 +- src/controller/passportFormer.py | 17 +++-- src/gui/__pycache__/mainGui.cpython-310.pyc | Bin 9092 -> 9092 bytes src/gui/__pycache__/plotter.cpython-310.pyc | Bin 10008 -> 10347 bytes src/gui/__pycache__/reportGui.cpython-310.pyc | Bin 6128 -> 6365 bytes .../settings_window.cpython-310.pyc | Bin 6140 -> 7053 bytes src/gui/plotter.py | 15 ++++- src/gui/reportGui.py | 53 ++++++++------- src/gui/settings_window.py | 62 ++++++++++++------ .../__pycache__/qt_settings.cpython-310.pyc | Bin 10430 -> 10445 bytes .../base/__pycache__/base.cpython-310.pyc | Bin 19688 -> 19688 bytes 15 files changed, 100 insertions(+), 53 deletions(-) diff --git a/src/controller/__pycache__/controller.cpython-310.pyc b/src/controller/__pycache__/controller.cpython-310.pyc index d35f37158fa2f09bc365ab90cdd43740ccb38472..dfd93469db209967fa3f7db7ed6e211b9cecb87e 100644 GIT binary patch delta 19 ZcmdnMvw?>zpO=@50SKzpO=@50SFc)Z{$*A0{|tfB^KltmE2;Oe2deT&k?Al7-S#^&_IsKs$7d1Jtv>!YGbnmiWON+4&^ow YV&h`x<0xVQ3TUzwfz;lbJe@lX00-(S2LJ#7 delta 180 zcmew>{#KkfpO=@50SNMwveGp-^4?|_(gN~o7_t~r7)lw7gi9Dx7$>uEr1NnAg}E3x z7)2Oa{#D6NUdJvmc{0Z~M$5@woFQT+K*b1)@Ntv_&*hsYz%nqDY`pEFpL89h-%<*P0!Z zCL}Uykjg_v{Q2~5^Wnhvx$)lTAbG^20jbbVM#X@U1!l{tSQKrHz;2}~sg_f5 zC|Mw$=~<76XK`o4sH8!*y%fkPo&q`J(d(q-Y-6&;64iDPHk(|Om>#+8Mtmvs+j7Z` zqF*-7Q<_u1(hAL}0xMrkfkTNcYD+dnxLh(s8WaLIt+RDEs4v|C_XSuI{kV|ZgS`5d z4cl3i2h>mOHcczXC{Dg^6$ff^Sq(e9?YEod`GWe?DASbs&KNqkpKM?+*|qRKZ}GPL zf5Ml>A^T90@Gs*99aPWFTB69PG3yM?ss-!F#DOjDC12)&7bhQ9Us(@tI~ZgTVH5z0 z#(Kq3gyBRH*L57`I_rDf4XV;_L4fFB18{W!OMAs)LRIZbqX>)Q7(xMI2;psnF@)0q z+6??iYO4{1t`zT}dVlBfERQ-10J{{S${__>Fp_uJ5tcfddeXyP3LBu#0Cpc#U{wZu z(G!5x`PII!NrQUSV~?CQS|%HGo!unuX-e>wWRq?I=|;)AA=##}W^7T<1PN%jW{v>e zMu;?btWu-kJwnzkXedB!4+r~--#i|N7gj?q|w|=kaw;SQb%xX4sMTk%o zKaRz1v?`^w5v@ep;a}FPXr|M0*G;Dzp=i0XDr;aQg}~U_;uu4xt1a&Nu7s)G4yE5% zDcK_1!|d4hN}u4eE811hm9AzG!Irf+zSUW2Ma|@o#?{1ymyJF7?V#G>UqxN$MH>#crvY$j%&m(wrl;5cpui`@Pfo*VOG zR-NkmXa?!>%n%n~(8fK!qOJRG(B%g>w$obAuP3dYQ$P0oak2~!aDNy9Z;LA!gKFw0 zUNIl9f^J?t>z|;OdeOf=ISX>KjMidtPu#QqOx?-;K8QRP69A}x-n}&r+_#(VO9CDf!vxlbyYD<0E z?znBwjgsK+gHF5)(2TF*uIMJb%6Fw7L{l}mRAUf$K81-8cL-y>DYbSkwL-5O@Hza| RJC}h2ROzP$RxpMR{|DE3YfJzD delta 1263 zcmZuvOKTKC5T5Rynca=qXQGj;kJSh|=HVj{e8h-mlZfI9J}wKgOfsEhbarO#nT@Xm zg+%l!eeooEQ*YuQ5WEOp6i<#PPm;4o53#B@ZbZ`1UsqT6SM_yuec1PVPbNsGJ2V&< zr`)+>?rCPnxl!0TnnOITN?@fPt+Oht>s6g-Q<}pZeMNJ0t}nBy0eizSVQ+E?y^;9=+net8m=ik$pRual%4Vx_*#XlbMc4eq=CTzN7rZ?SUmZ|YQ34;FZx`_V@F z&#cGVEKWwn@j-wJlxyYA=^sg6e$%JT0y1h>p%HQ$8GL8iryt(84o8D z$jKvY2LKHzw09wFZ8na_0rloRNe(d~N zJ`Mzn#LVNqIDs)pOxzYrRr3`1PQnba#ZAqmJJ!s#d#Q1IW}cVk-N>Rsm%q|WeaGOu z#ltXSyuEFQxgcfcYXRRRb^=)WR%MRLJJ~66TE5TT?^eI4sETzMuI-nXa`(xE{FECw z){QhGD!9-VdjjnLADL}7pu)Ts@+iWNyCx6ihaMcnoBap_2!jairi*o~OUzt95+itm zsfB}}G;M$qb_fniFjZBO+5uWJdWQshtwd}#Y~Qg%6+F&1Bi9RurtR|~2MoEuE)>{y cs#6tdvm9}9v>rH3kB{MJuP4gU9P94=1AUGGOaK4? diff --git a/src/controller/monitor.py b/src/controller/monitor.py index cac2975..1c24db6 100644 --- a/src/controller/monitor.py +++ b/src/controller/monitor.py @@ -51,7 +51,6 @@ class DirectoryMonitor(BaseDirectoryMonitor): def update_plots(self): if self._files is not None: - print("updPlot") self._mediator.notify(self, self._files) def custom_csv_extract_only(self, path: str): @@ -62,15 +61,12 @@ class DirectoryMonitor(BaseDirectoryMonitor): self._mediator.notify(self, [None]) def start_raport(self) -> None: - print("startRaport") self.stop() - self._files = [] - print(self._files) + self._files = [''] self._mediator.notify(self, [None]) def start_seeking(self) -> None: - print("startSeeking") self._init_state() self.start() diff --git a/src/controller/passportFormer.py b/src/controller/passportFormer.py index ad7ca1c..a773078 100644 --- a/src/controller/passportFormer.py +++ b/src/controller/passportFormer.py @@ -1,4 +1,7 @@ import pandas as pd +import traceback +import sys +from loguru import logger from utils.base.base import BasePointPassportFormer, BaseIdealDataBuilder @@ -32,8 +35,16 @@ class idealDataBuilder(BaseIdealDataBuilder): class PassportFormer(BasePointPassportFormer): def form_passports(self, data: list[pd.DataFrame]) -> list[list[pd.DataFrame, dict, int]]: - return_data = [self._build_passports_pocket(dataframe) for dataframe in data] - self._mediator.notify(self, return_data) + try: + return_data = [self._build_passports_pocket(dataframe) for dataframe in data] + except: + tb = sys.exc_info()[2] + tbinfo = traceback.format_tb(tb)[0] + pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) + logger.error(pymsg) + return_data = [] + finally: + self._mediator.notify(self, return_data) def _build_passports_pocket(self, dataframe: pd.DataFrame) -> list[pd.DataFrame, dict, int]: @@ -64,11 +75,9 @@ class PassportFormer(BasePointPassportFormer): cache_key = self._generate_cache_key(params_list) if cache_key in self._ideal_data_cashe : ideal_data = self._ideal_data_cashe[cache_key] - print(f"Cache hit") else: ideal_data = self._build_ideal_data(idealDataBuilder=idealDataBuilder, params=params_list) self._ideal_data_cashe[cache_key] = ideal_data - print(f"Cache miss. Computed and cached.") if events is not None: idx = i+1 if idx_shift else i point_timeframe = [events[self._stages[0]][0][i], events[self._stages[-1]][1][idx]] diff --git a/src/gui/__pycache__/mainGui.cpython-310.pyc b/src/gui/__pycache__/mainGui.cpython-310.pyc index ebb488602b45d5037b07527190f228028ed5cdb3..4fc53b1980dd3129256f7e86ba44e1326518ad4b 100644 GIT binary patch delta 19 ZcmZp1Z*k|!=jG*M0D>nAHgZ)d0{}4H1rPuL delta 19 YcmZp1Z*k|!=jG*M00N1;ja*gA04o~=5&!@I diff --git a/src/gui/__pycache__/plotter.cpython-310.pyc b/src/gui/__pycache__/plotter.cpython-310.pyc index 927972c2e6f9af0fb96cf78a4d7fa6419b2416cb..629f6aab81eb3f00be8fa94eab0b96bb3ba1e93b 100644 GIT binary patch delta 2635 zcmZuzUu+!38Q8KguPZTQ5F?fcMESQZsDeC9fFnNny@ly@6DXm=c*T#T5;#S z8Iz=X5PKeFJKy|EuYw}1Dn2K3{iswI{1OA8s2Ic`U4#`oRrQJ7`~c8uYN|H9v}-wt z`O^+}&T$&nv^1a4purA-0P90IjBp=9b~w&@#Ey1^9O`_m#iV~6DR*7cUnA7^I`1Ln#u<8Lqh;H_4Zj9ZleJ;a8TT6B$P|7_Kbzc@Ql=Kg595r2s}77E$#b=urol(j_8r+&%&8>qsivZ zipA0ua#HM;rs~omGblNSAotAUEc1%AH<2f%1z0d{^Hc-fY|c)gn2fJ z%S*{@=i#nx(nkAJlSZwOGVmljiF=+wIEU~o!gBz%GTYZl23#sOk9^e0D*G;V0-O7x zA9)Eo544o{Sx_&a)DptJa#F({ak4T@mOIZ@-Xq?NC~y>D2_k@cu`z^uDP!JKnae1C z1wp0~<|ZUgi@i<{hDS1M-VXIS0F=hO!EyV;fx@CL6F{& zSMS!Oc2J2|Q0n&xrxBzQGH9|uR*`m~EMS@T$dEw#26p0mkrO00I_=&+68$O)kBeO2 z+lQscU0hRy27)I(?wctcI81!sH%Q*>lnz()(+eme{pi6gHJB4YU0hg5i|h89!`z4_ z$r76ao@HF5oXb%8xM@wS3_e0$5Vr=8>CzQf#ixU#I);%wF1{W-MJ7aPXkNFFFfLvg zy7aJARJuoM^8|2eB+J(;67tHgLjK*O_}rd^Y^lSegssI(r^PGz1yg<2b7Uq&hT#WeQCvT!$emgqM)} zJLKj9VC9ll$m+N>K={geKU!xYEUlibC5i7w7R&2Es6Col7K!Q6Uzg^Ak|oD0;@arg zFh+^R2u%QJ_ztw1#E#;KvNPht(a8bX12Cs7{7@FKEE&YVM_)XPm1uQek68j8zz=DI zIZ()%-O^rm2~U?1eGO&xvo;39DmG(3f{(cy&_+ai>}9ekz8xE!zz9GA$l{hEk^Q4= zueSWawXaK;|4j_u|3g~`$s+u)ktcr#*gCgW`jgTiE^*a2jBWC?a+BOpFDua_M8SWq z?2q^b+EFSxWJSy!Z>@Cn6%zY9D>3zpe zoUj>C_6MNscWJf(%hTe)@#!{OLk_0>R&|9rb-L=**T?**5ziF2%Ebl7Vm5Y8E*VzH zQmqKtvYDg?-KfJ&(TG!%|FSPN8!-zZ=zJA~IAiEkXykYZ%fs93kKxWNFRKF!3@wq(w5CnhfSN*pT3boiE-;bhz{@ zWQY_2dsX$vW5!k$FZ`^=rsM`F?#Gn}Wsxt#w%RBw!NBnGz{&t=-u3I8y@P8*{C9ky zUBD@pE*n7@L#QB3BH&e%cERn%{d!3GTI{A8Z=v%~A*Xm=-nRJMV6!MMOIjA~onn+F z$S?zC^)VG^7*qBafPn)&7vnAOLe>kj9`XLfKXjbc4vV$P$#xsr0$~Th!lzP;wX$%S z&CS=ihpk82V(CpMa-D?z6(m!gZ#JQeGHI%Td%IiQ50a@>C!rFUiN|84$WPx(r}Vfn e3vZKFK<6;AWK@pGrx-rQ@JUuBU1~+`(|!V!T4Txp delta 2121 zcmZuyO>7fK6!xs+jW_;@aS{?@$1wyF+&}=8LJ6r!N+=DG5dPB*)w1!9&BFe;v+DvW zB?piS68%Z1hn^@sP>HJQ#kXE7(GwDvw$e&Hw7072p@*u6s#V{cZIcvX$=}SI_vX#_ zerEQU*^g(^ZYtFlf#39DvqtwXr}M;F9)51B)rc696;~A)qgI=pP!o1iO_B)6Emq1- zt7#HB95G^sd@EweHzl_9oR#gX&hM z`6T9&?g2DffuExwmSmRaXIl?U7f@G3SoORS#6V`WX1Y!gtGJfSo<6PfztcQluTd?u zE%KjQKO@`top?^}MVC4Lc|1?@{G0e8SWYS3#ivNOYo=rRTHSJe&Gf0ggHI}Z$iC)V z$|JH3Z68X3G_q3=d`MUsoeCEsWM!;I9eTCS$_Kffm?OjdQDWq%h-e>LzJwt59Kcx^ zmLTj2k3lO4%-8%NMjb=*S!u=p%Q(yM1Icb+b1r$EEFFTCK%q{|w`=w%vVl}Z?I49$A@C+QwC-K?kY zk);!8)&npD#YA?jAK_V)lxI>pi{|GLiU`mXSbi)W+O7qN`qg&nre>YPh zqs`wk9b^Dmux^A60H;fm7=xCo?)i-1`XnF97N-8st+bZbd9->RVH82o5~UNZujAU9 z-r?_M*OSHOgX|3=&!KLBmpVV}5{a*%Y#>mCDu2>BI<#glEC%aEKy}KhF0*x~LN!ZY zpw`{yuCBD4n8bY|y;XiBm+RUNvKl`{eP2}UBC2bAG50)~kKsd$63%z7NpD%2c zPvXKMey7lPVg{$!T4CD^;cP2FAbZrGrEvT0%P@p3eg?JksEt~nih2#3Eua_&s9~9@wRZceMwqTl| zDaAz;c@xh^N?T}{mZ4oSjT-gu^NEeW@5Q&V1^zgCn*rX5REa?h=~nzYnT*^dZ%el$ zmm>Gc?Z|cMQwg5`C_L&d&0jZtL3WE{2zwv4!D$mPh{$x!)9t!N*&?j0K40t#hssFTA#62l%=|%DwA;JD@?a( z5UX0Q?lT$f^9X$i;@wH%Yzx9LpC87%g5XX1c-cPUBcGB3S6r50qvv=UdOiVG5)I22|!g-VrbYk!_M^MCKn&YR~y zj{o|c-OXlAi9X+bvECRi@7hP8zB_(m90Ft6@FWicbJ?U{CCId`WecQf$x}V;W69He zeLZ_UwQTS1R5Uf{HX1(O`r$_aOMEWR4)UTJJt=y^?+M!{#h-F#eo6AOa}p%qD6?nn zOP)R~UDKlMp1q^(gJ;l4_sku=Bzc*V6y@%#tYPUol%#7$l;11t82bRy+sRsv-EX7@ z0LH|2`polpW!ejYH_XqYyXx27)s2x>XRUkE+|HU)h+Q0+Nrrb>Rdoi$x9Lw`j#J@Q z80-EAt2GwKM)cq0*jVdg+l^{bokS6$O4DM+=an2&Oesg}qwGo7yWUnTlS+;1$r?&; zs~t8lM^Sv7kxypUH(P=Dy`UR~SRs!i7<=*@Ym#gd za0>V|;WakSiy`y3!;@sjs@v=N9nVoQ!;u-rIWd%ZMq%Y#e;ll{d*;@1M;z;MvpcJ;ON5m}0!jm}Vrk;Yw7UG@cSa=Z{hLa$y!O zin+p5@KOJ2;WM~A&(bBvJB)V;U&^?^_8Nn`18 z4GP@o-x&ECRh3}Tl~Tp zh_8#|1#ZodYotpy6w_u|{9atMbFtCex)L?e?KN>l)JhWrIL?zCLd<_to46@%mQEbv R?$@O}-7t%8pH3{M{{{E>7Ha?i delta 1077 zcmZ{j-%ry}6vubhwQIX|ze2_Y0f9);U@$0*A1ZSL#Q|CPH3)*|AGQAY3w$#1$wbq{H#OnSN8$r|PM2sxLYsc_?K$W6oO|x+x87gp0~JM) zU2whKE#_ah><3Ph+5PT#GhdR*^0G`^<1Ss$y$@Wv*AO>+_qk>N{$5fNr)IOG+Iqow z_4y+q5_|5R4twD%0z4c%CIv8#+Y)qf&ZSD$2QETL2m9(7;WDa^rTK?$)ypKIbF>X2 zZBMSE@6aGf+KdRHkhSjvl3+7Rd-5t6RBt_Q%!xxJ z5h;Kzm|D47GUzB;j-|$2S!OByBxM~aLnL-Uz;b|RrFv*1u81Kf*>EtU+yDvvqT6PH zPOzuJ0UsuyXr_zoOK_aO4pOr^LwR!U0$ML3`Vqs3ONh$|r&rjS4CLu$@4`K>n;+q6 zl4S8n2f1r4MIMorG=@$gW)O3Lmu@S(hMM@%G7CLFIpxM^N1yY?JaMnux48} zjoL!dEaspa3oOylvbc^xI^tiy=s3Qv;zGGp+%i`06!ltxuA%iNqP|^F%N#ZG$2+Ql zW6!c0Omgp7^#*t{s&rzV^-f>I6nR7ep!(|Px`~F9>ZBX!T|+pvIl~fkMd1DakmbPr zg1wLKW>pNt0jBK;oIdJg#mS;L5!8cl8khxT`=?=$$F!Q3t{G*DXH4A){9h<;nC94% z#_q5P(!{bwSAax4@+tPI@m4^wrRvV@TApgv0-a~6Si*11>-byODwUGSSS%j$JBvcZ I@7z)DFZs#VlK=n! diff --git a/src/gui/__pycache__/settings_window.cpython-310.pyc b/src/gui/__pycache__/settings_window.cpython-310.pyc index 2f379757855fc00b1564e8fbc9353141f1d1881f..dea8ff329d95a36ae9a1e7e25151d69682687379 100644 GIT binary patch delta 2986 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 niE`DcdF~T None: """Создает ParameterTree для элементов всех графиков выбранной вкладки""" - self._clear() - param_tree = ParameterTree() - layout = self.layout() - layout.addWidget(param_tree) - """if index in self._tab_cashe: - body = self._tab_cashe[index] - else: + try: + self._clear() + param_tree = ParameterTree() + layout = self.layout() + layout.addWidget(param_tree) + """if index in self._tab_cashe: + body = self._tab_cashe[index] + else: + body= [ + self._generate_reg_params(reg_items), + self._generate_curve_params(curve_items) + ] + self._tab_cashe[index] = body""" body= [ - self._generate_reg_params(reg_items), - self._generate_curve_params(curve_items) - ] - self._tab_cashe[index] = body""" - body= [ - self._generate_reg_params(reg_items), - self._generate_curve_params(curve_items) - ] - # Добавляем параметры в дерево - params = Parameter.create(name='params', type='group', children=body) - params.sigTreeStateChanged.connect( - lambda: self._update_settings(reg_items, curve_items, params) - ) - param_tree.setParameters(params, showTop=False) + self._generate_reg_params(reg_items), + self._generate_curve_params(curve_items) + ] + # Добавляем параметры в дерево + params = Parameter.create(name='params', type='group', children=body) + params.sigTreeStateChanged.connect( + lambda: self._update_settings(reg_items, curve_items, params) + ) + param_tree.setParameters(params, showTop=False) + except: + tb = sys.exc_info()[2] + tbinfo = traceback.format_tb(tb)[0] + pymsg = "Traceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) + logger.error(pymsg) def _clear(self) -> None: """ diff --git a/src/gui/settings_window.py b/src/gui/settings_window.py index f159165..d98f64c 100644 --- a/src/gui/settings_window.py +++ b/src/gui/settings_window.py @@ -2,8 +2,9 @@ from typing import Callable, Optional, Any from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, QHBoxLayout, QVBoxLayout, QLabel, - QTableWidget, QTableWidgetItem) -from PyQt5.QtGui import QIntValidator + QTableWidget, QTableWidgetItem, + QStyledItemDelegate) +from PyQt5.QtGui import QIntValidator, QDoubleValidator from utils.json_tools import read_json, write_json from utils import qt_settings as qts @@ -88,33 +89,34 @@ class settingsWindow(QWidget): self._param_table.setColumnCount(0) return - column_count = len(self._data[first_key]) + 1 + column_count = len(self._data[first_key]) self._param_table.setRowCount(len(self._data)) self._param_table.setColumnCount(column_count) + self._param_table.setVerticalHeaderLabels(self._data.keys()) - for i, (key, items) in enumerate(self._data.items()): - self._param_table.setItem(i, 0, QTableWidgetItem(key)) + int_delegate = ValidatorDelegate(data_type='int', parent=self._param_table) + float_delegate = ValidatorDelegate(data_type='float', parent=self._param_table) + str_delegate = ValidatorDelegate(data_type='str', parent=self._param_table) + + for i, (_, items) in enumerate(self._data.items()): for j, item in enumerate(items): - self._param_table.setItem(i, j+1, QTableWidgetItem(str(item))) + self._param_table.setItem(i, j, QTableWidgetItem(str(item))) + if type(item) == int: + self._param_table.setItemDelegateForRow(i, int_delegate) + elif type(item) == float: + self._param_table.setItemDelegateForRow(i, float_delegate) + else: + self._param_table.setItemDelegateForRow(i, str_delegate) + + def _save(self) -> None: """Сохраняет текущие параметры из таблицы в self._data и вызывает _upd_func().""" new_data = {} - row_count = self._param_table.rowCount() col_count = self._param_table.columnCount() - - for i in range(row_count): - key_item = self._param_table.item(i, 0) - if key_item is None: - continue - key = key_item.text() - - # Если ключ пустой, пропускаем - if not key: - continue - + for i, key in enumerate(self._data.keys()): row_data = [] - for j in range(1, col_count): + for j in range(col_count): cell_item = self._param_table.item(i, j) if cell_item is None: continue @@ -154,7 +156,7 @@ class settingsWindow(QWidget): return prev_columns = self._param_table.columnCount() - desired_columns = num_points + 1 + desired_columns = num_points if desired_columns <= prev_columns: return @@ -188,6 +190,26 @@ class OperatorSettings(settingsWindow): pass +class ValidatorDelegate(QStyledItemDelegate): + def __init__(self, data_type='str', parent=None): + super().__init__(parent) + self.data_type = data_type + if self.data_type == 'int': + self.validator = QIntValidator() + elif self.data_type == 'float': + self.validator = QDoubleValidator() + self.validator.setNotation(QDoubleValidator.StandardNotation) + else: + self.validator = None + + def createEditor(self, parent, option, index): + editor = QLineEdit(parent) + if self.validator: + editor.setValidator(self.validator) + return editor + + + if __name__ == '__main__': import pyqtgraph as pg app = pg.mkQApp("Parameter Tree Example") diff --git a/src/utils/__pycache__/qt_settings.cpython-310.pyc b/src/utils/__pycache__/qt_settings.cpython-310.pyc index 58e15663a40337b7bab7e90c146435faa7f9fd3f..ab55d503db201325c986ba04fcdfc76407841ef6 100644 GIT binary patch delta 62 zcmdlNcs7tXpO=@50SKZ>veG9_bxG#`5pO=@50SMTNv(lR<@b8xH4}e*F7HqPXGq_ delta 21 bcmaDclkvq&My`BbUM>b8*pai5>z)q)O