From 74b65eee5d99a3633f219f5947cafb15e3cc7748 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 24 Dec 2024 18:45:07 +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=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D1=8B=D0=B1=D0=B8=D1=80=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=D1=83=D1=8E=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=B4=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B2=D0=BC=D0=B5=D1=89=D0=B0=D1=82=D1=8C=20=D0=B8?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/__pycache__/mainGui.cpython-310.pyc | Bin 9249 -> 9304 bytes src/gui/__pycache__/plotter.cpython-310.pyc | Bin 10347 -> 10962 bytes src/gui/__pycache__/reportGui.cpython-310.pyc | Bin 6365 -> 7558 bytes src/gui/mainGui.py | 8 ++-- src/gui/plotter.py | 43 +++++++++++++----- src/gui/reportGui.py | 42 ++++++++++++++--- 6 files changed, 73 insertions(+), 20 deletions(-) diff --git a/src/gui/__pycache__/mainGui.cpython-310.pyc b/src/gui/__pycache__/mainGui.cpython-310.pyc index b6a102a0cabe498d4c4557d33fd006cd18a2149e..74baf8ef47105fc49d881f8f15b57fc302aa6478 100644 GIT binary patch delta 690 zcmYjOziSjh6rMLbyF0h{13AUJy-jkrCnTPThz4u}21ymgfGBDaScslQ$lOIC&X__2 z5iNvQ1ub@MZ45RR;(wr^jgrDDl_;bT1Y_Zw5l(k_-+u4CkH@@kin-5owdHCxV)RXa z=r3J4zFoV}TrX29Db7+1-V$h-W!Gm6*Zi6=o)N}3!I0%pFca!9=NV{GaA1ye?T@&p z1ItP4kydJ%3+)x)l)jdZv3`)#luQg|UMg4~UCjIf8q5u`&9V-yaD{7|RcKI2m$KlN zP*;c5EVR7I?sK|g$wZpvH61zqLdF)Djh@6bj>V2#8RB&O9Lo49p5&^Jzv7un*Debc zkh}so+uBYP6;zv`Csc!eJACn^TD8U7cpypP3!X||#%s3Fw9vAUSTF>;xS#C7SNt~i z6!vg)d@X)368%%!@joz`cm_Z5^~A2fLHRxw?KA5EF&obN%S34DzfP0;8CwN)lq%f% zsg7x$iwp`do@1PtaEv@QKI!~C(4ajn=uHGTGe)L}d3A&4tD6@31ies=dB8{c%cU=uH;Q}7V)r7d`jTj`15ksUF>cWE0U x{GPrl-?4?e77V`Vc3}hGcNaScD?vo3E+VfkWLTG~N|O2BA;qn98P6a2_y?;Qosa+k delta 714 zcmZ8eO=}ZT6n*#2XC@zoSZF3`+9VB?AgDXB;Hp)+D4|-Hx(Ln?)7r0>X|UxDE?QI+ zS8pYDF|%^p;#%-0h#Mu~!jFxs3I!K};JvTVLT9*V&b#OE-hF4j%%}5(^?crA_)NWD z?tZ&;SXeAQp|y)Oi`73skTA#YUyr%u_l($x&De@q0x64aX(v1YX{H>Q=3H9DQ8!R` zq?4G^NI|QXbTnhjcH&4oFd{d}q%83QGlemx_dsnf$x54yn_QALha0)l4XhPY+>P>q zO}xZ*IS!SHGm<3*nbH1*fGshqmZPrtzPjV@gQt%CX;m)Y@M?Gy7d&vedQd*BY~oT( zBD72~hMyttTon;Dw^Y4(VI;p2ZZC?k-@iEs*P^fLcICj|Cb>jVCa4fdgdeIr{u_R& zZ1oKsskhY~fA`dM=A^@p)y%{`{867Lep-9D{;NJrUh7)OsC42BNbuq(31j8~+XB(R z4yQ~-Q}VJgAl3Iq1NM|P)u|P8wuf)g^o*kEIz>n1 Q(b8^>3QpEF^>pgfe+{Fd7ytkO diff --git a/src/gui/__pycache__/plotter.cpython-310.pyc b/src/gui/__pycache__/plotter.cpython-310.pyc index 629f6aab81eb3f00be8fa94eab0b96bb3ba1e93b..df953b5e54208da6a0551c88a1880300933a0400 100644 GIT binary patch delta 4309 zcmahMTWlN0@%H#UzC`gMlA=UW*2AK$ryVy*p~`Y>CvjrCmK`VQ*)BtCPYNYIq~$TT z)IAW5TvSHm#_r~$P1}SDk^pIeqJWaNK+z!iN&Ayl?S}*KulXsA_M>e+{1FuG%#xPu z#6U^h%+6!yW@cx1=l*``FJ}W~zu%+4@AA!s`46UV1iHu@H})oKMThPvI(28!rMrki z6{;58MNQY_*jDi99^lyuUfnCPPxk?~7yQM59%$*b=|L%L*F%6Eg>W&VM~YEBD&@{X zM=_?yi1L_1UDSO=q3$(Rj{~Jq&y@~^dW_hbO;1qU871Srg)U}XH$IHnyfcsA_+x*% z;hj0Nl$$l!G1Dj_kzX}Vl?(aVl?-X9GvQZxe5Ol*ejl#rCT>_|TpgEz4_f&_w21Wmtj6a~-- zXJ?s_GmY$QmAznO^VG-{;+tEJGKmeL(l)qd12W@ez2a%t!4rKb8$hsQc@W5klNs~* za;f2%Ef>n{i*JkEd0WNI%^TUK?vVJ@^){IhSKUcx51LGipSin8ulT+DD6sunEd2$i z+p_sm-pno)%4RkXOZ1>PqJ4!-ZGKDphzz6dJ8DB69hVNiL)c+7Dox0cwaIy-WL#ci zQ%{Pb_gP5)N8ZsVWkge``3M3z=Ln9PVM&K8(qh8}1T(W{!(o(Y)?}mG_8-GhR2=lh z$f3<=e4Nyt08T?QO4XvlAkAzXHI5@Vf#4*9uLH>V*^UQt$)p?G9_W6#G+8rW%$MdX z>=evtkbH9uX3)xM1Us%Y<8`1~T)ZBLle3#kf!9dwX;kY5a1s_1y<`0d?&p$rUzg6I z`gsI${jtViwXu4>xZ0s?j?!jHWh?plQm#;05Z8jU-RmiB51lHy5=UxkZ_3ow*t!z~p?e}hNY)LqU`x zoi$r}AYH{>xAmK?cemc#`sLPd|NPR{@3!9GdN2L8bk&QJSGQi-`r+2=K(DF;X*glE zTmh=3Xq3#=_9cVOm02-Ynl;je+(o0X8iezzkiLt*+Ag=oJ*;WkMr{g77#2VD2T1d?wU_VmAxe2tGB2^Zlzo`b#L>a zks7)OL&`SC-sWM@5-igEQd7`yR^+{PchSSE8Xa;c-j%ba`YVbuqEz;PMoLSOPU2MY z?h4-X4-pUXs2<`*nRq<zI)P%o(Y5(;;7-v(|T~PYfomD?H72B^1~`zOI%cX1aoR)EwD+1SdEt7356e-MLO#L0Ytp@Iw9gt@S7<-H z1@dJLt=F2wwm&;5reQu3SEO70aLA5CaQy$>8u*f1{`q7AHh8>CRRfA@wljwv6O9Pnca;oHQI)7FBDMkAmz^KS)GtV`g`=%BY{FzXRI| zs&BmHYh_&)3S@q)S*_MM@8DxlY8^br#{tLq81*mOz}P?dI3G(Ya6N^s2|mH&i_O+Um#Y03@>Z!1<5 ztI7T3toTK8ms55c7sSnEj}yBmc1V1lJU}vHqHEguO=Jv-OI>Fta`@ zH#IFj={^iSZZg&BrKn>dcveiOI?1#+ml|?DgN!G{)l~P)860Ap(rnX)aWnz|j(fvA zWk9!GTm;l?DRq=Shf-SsM7Bz`$mWrBgYvV-^QA@hg1DVJ?Oz6F=0MZKOXBICv7qcW zWe-&V8Ow?5J?UmY*Npv_j<0BDzj@aQfBH0u zi|5kOm~4a{mFM$tn|=eW$>mrTFQwyTK)jVc2aOr&O+JLVf=*C&zcP8UXZL3>R`Uhg zx+Z@OI+Z^Fa60h9f(we+#p&Lkw}(hj4Z>v=f)B7xxVC(ofnDEIACNW)`%%;Mqkv=> zxojm@Tq+ps3UGE7iG3T$Q{v5!`~P0J7*GJ>Pxqk;Vw55asWs;3b3ur@#pJ5PpRkqtY| z&zkHtqKC(5a4yr#>Kh8#N5L$Y4Wvsdrd#_xDy$PBPr@68OTfLbIOqJeNHS>ka=*3*ckbwD*qul@kboPFc iG~AQLGOZSjDctlG{PyZse6q0cJHFWw`P6_Kar_UM{sgN4 delta 3794 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 diff --git a/src/gui/__pycache__/reportGui.cpython-310.pyc b/src/gui/__pycache__/reportGui.cpython-310.pyc index 51673707f93b5f90fc7366da9bedb79bb56c5c0b..252a6e112779828c88170b67adca454658c68428 100644 GIT binary patch delta 3171 zcmZ`*U2Gf25#HVV;qmw@>W8A_A4yi6Fm40~1&kCmY{Rjgx^Yy?O6*#(D^uJPMd?IR zd&k6f$udaXibY|x!J^2EAH=sB1&X4|&qJG{K!HB>fkF!eIG_&&`qH9(=~JO5c4zkV zW2p{>otvGRo!On4{Z@Z@@dsZ|Ruc)E!0+;(7fS=oX%U^;?aBhjKQDhHje>khB`-|*Lj>LKoa3e$8w^JHjLOj z%Ml(?+7wTNHm-bvqy-Clcm_lX6(Th1<$WMY@_r2Hq#Qj*z;1wNL7L`+d!#u&1kxTA zF0{$`z!Z*O7nP!cso(m=;2VLV!SMbF zs$nd~+LW6-a-UIhjqt=Y1jau+%oUFNRGx zSTCM14Fq;g+FF~mS(|ord0!t*7$O4-(T}88eyoq$&!RO0l9qqfOSD&BG$xZl?`+Ab zIHKS?vn#&*iE;b+n7|AMM!CYB+oA^@C|4M5#;z4aVR_aUjw8n83+5O-ATOJJ2cH8a zV-_{3MQzHc6}5oVzet-V&8)XfPU)EZTV%l)1;gWV$~x1+nyDI%0fYHfHv{g(J*z>n zUgsbM+<2fhS%X3C%{m%(JKf)QKk0th{bl!~jdw>@{E?0O-CuV<>i!1CryK8X{Ae>a z<&QY7v+PuSPYl4CB3!_oABM#CXsPU>%Mxjjn~58&Ng)#4(l%Km4X8b*5488$3dUy2 zkH~^`o(7rOqHw~D&3c99n(KIZEnpMJ18vE<6X@8R52;F{NWl_;H45yLZrSsT)#ci$ zGcZqhSVEHwQ1kKK6Y>i?SA@1!>GdW~y47OA^-ck^y=FVOp*laWh3@eXfhHU;40H~r zDw;S7+$k8I1tiH#YCqPsyJHxqwG&6Y49X(*#P$!fqr*Ujhq((&(PZiZ0Bk+bN)!^J zPX_kYvR9rfyJa7aJXfu{4>d6eD?|=RV7ygu>kcFum4&DmoABw|16?d*8{F zI0O3gFjR)1pP2sm?&uY#Ru%rV*F`JsLE(9>K#0|r-d?d$SC z_McuyzhSX7aRK>hAc0w^)tm~?n_=Cqqe3}5i=4`cp^CqM!`}vdVSOwNYf|!#(O^pwVOCZWy;aMS{48~BNW6yp zz5{#*WVhv!^o158;GXvZkAwiATKreQGypw0?EvO*xb;ori8;Io@J^s!S9*9Ynvo~w zCd@50j{p~KkTnVj0uT@H3cx?iucH7^zF}?&0L+v@M9mrM)-(h=1wnQ*28&oD*02DC z0Qb>q$^Z_n3KLF@@jaaNwl96B-#Zhj0yfkoO% z(=dE$9dF@^Sd^#x4qkg3jcy~^xl&>lrvew+E;Q@x+hy)AgblNTs#{2wP!AYd z+TTPTD1NrS-sjQQzTMve&163MrTbJEC~l(n?;>dc$%hZCcn1Yvwomar)T)lYg`C2P z6v+U)dpmv5d@4T~ctt+UB!;nS7mA-+ro-W!gW<}wVQU_`Zj{}0{_%qKkfF_!FU6PhcJ*fZJMNU_-Ekm;r$>U zcHiJm`w0sc0EYCzXEJ|4CbGv{Cx92DNbpS)cvOM^I|PxbYh_+?{J@;LRG4#I^==3R zc!7`{rXS%`A#m74Wn37)40wO8;1@2!LoE<01ipa+ds$%71!h>_DT0LjAbTu>Rk28t z4(awtCV42rOxewzKCiRSnQnj1a*VRajIl?I*^gNNo>|}SEb~ZUvGS=PTD!C2mqekq gAQt4=!85}zV8CM-&~&S%x~K~iCEo`kJA)_x2fw7faR2}S delta 2084 zcmZ`)OK%%h6u$S)d;E;!#Bt){xM?d5MG&MeTKY^0EiDlGjuhIYPVOX`WD=)$CIzao zB4|a-q6@f!1?s|PgJ1y$*bI-Yc zZ~t%4r)#N{P2ltWXA5)1@(1Z()=U)P6Z{R}k_pPm1moM+$t>lJD>tkOg{!X0HF$JR zXLW9H^M*R1@gZ(;8&-O(*Ijj1El?{SlEY9S3zW|kGnBaXei02bK?DfPKsaatxX@_x|d_y9yKZL&Jw#-9SVo0lJB z2YCh9{5nw$GSPFEI6LHC_Sc#&+;CMa&!}-lI)LRe;8EZSegL@kLPKei7NI1h*GXLk ziM2>wi?pT^sVz#0MSxQqtVQ8hYmgS5V|6{$7Yq(HjdZTuRNkizx?nb~b+S&^*}4KX zQ75@}!^8lQx?ndb?8~^xC>bX_brxQS-!Rckwg@+iq;7<%W;!xjlv^N~+>Xow;fVqX zGn-b)BDqcrq;7@TW>;j%0rhrKgB^6^R?+~tkp^p!25l+wPqkvIA_ug{%d%FnccB>r zNXwJj9L>qEwK3VFU)gDk1h8$*TjuUtq6*n z&*!)dFfL;z)u~Bs%BX3XRK1tgbei2zp+vMIJ#$_g1hePl&*l+%EAdHx4@h^DXWXhk z7`QWGO$2RKfFye5spQ`Nwj$g>WWcBc_#!a`a8Q1l{9`!wwqx%VzZM4KFzR~&?j}xf z4BDYbfN_{OD!)tZ8hR0JwuIaP+{?(10$kfED|S&<(%CASTdl*U+C(*u7PG(CZufWnVI$>T% zI!^CZT)hU+)`RNOitmasWVU3DsZ7e-**#ipyKyI*q}`4p3TWGh-rCiwzv_ON>l-bD z_&YYeqdwG&3uvVK-jWvvZTo^3c+;Nmg|LO`TFt*}AM<>FaHi(hgp-1V&*du6vKV(- ztOoPqynHved6k+CCFl(DK%vYqfMmhwGSZtuj z1`LOSo;nCl*KyIKmqUmjFIz;ykWr5hwz-!WbkHci{nKunoi{!VEy$SXw-a z=i9aeH{3i~aamq2Y#U!fqh*8#Eh^5S=%J(Sd&}bo)G1iClc(T@ z8m)%a6L7`?he0p|JXwK75WaLu!)Yv;Nz$}ewaY9m7fXk`75g8SXO!J%jNN0*zQ=mx mkEJr5ly^!;%Dd6m0f0fS&8>=6p`&1&9{2d18_JX04*Uzd7_$Tb diff --git a/src/gui/mainGui.py b/src/gui/mainGui.py index 528f53b..9421ec1 100644 --- a/src/gui/mainGui.py +++ b/src/gui/mainGui.py @@ -202,11 +202,12 @@ class MainWindow(BaseMainWindow): def show_plot_tabs(self, plot_widgets: list[QtWidgets.QWidget]) -> None: for plot_widget in plot_widgets: - widget, reg_items, curve_items = plot_widget + widget, reg_items, curve_items, qt_items = plot_widget tab = QtWidgets.QWidget() tab.setProperty("reg_items", reg_items) - tab.setProperty("curve_items", curve_items) + tab.setProperty("curve_items", curve_items) + tab.setProperty("qt_items", qt_items) grid = QtWidgets.QGridLayout() grid.addWidget(widget) tab.setLayout(grid) @@ -259,7 +260,8 @@ class MainWindow(BaseMainWindow): if tab is not None and self.report_dock.isVisible(): reg_items = tab.property("reg_items") curve_items = tab.property("curve_items") - self.repSettings.build(index, reg_items, curve_items) + qt_items = tab.property("qt_items") + self.repSettings.build(index, reg_items, curve_items, qt_items) def _save_plots(self) -> None: filepath, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save file", "", "Image Files (*.png *.jpeg)") diff --git a/src/gui/plotter.py b/src/gui/plotter.py index 9865c16..b709a29 100644 --- a/src/gui/plotter.py +++ b/src/gui/plotter.py @@ -1,4 +1,9 @@ -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QGraphicsRectItem +from PyQt5.QtWidgets import (QWidget, QVBoxLayout, + QHBoxLayout, QLabel, + QGraphicsRectItem, QSpacerItem, + QSizePolicy) + +from PyQt5.QtCore import Qt import copy import traceback import sys @@ -144,21 +149,36 @@ class PlotWidget(BasePlotWidget): layout: QVBoxLayout, TWC_time: float, ideal_time: float, - tesla_time: float) -> None: + tesla_time: float, + qt_items: dict) -> None: """ Добавляет QLabel с информацией о производительности. """ tesla_TWC = round((1 - TWC_time/tesla_time)*100, 2) if tesla_time else 0.0 tesla_ideal = round((1 - ideal_time/tesla_time)*100, 2) if tesla_time else 0.0 TWC_ideal = round((ideal_time/TWC_time)*100, 2) if TWC_time else 0.0 + + label_widget = QWidget() + label_layout = QHBoxLayout(label_widget) + start_label = QLabel("Сокращение длительности: ") + real_label = QLabel(f"фактическое = {tesla_TWC} % ") + ideal_label = QLabel(f"идеальное = {tesla_ideal} % ") + kdip_label = QLabel(f"КДИП = {TWC_ideal}% ") + label_layout.addWidget(start_label, alignment=Qt.AlignLeft) + label_layout.addWidget(real_label, alignment=Qt.AlignLeft) + label_layout.addWidget(ideal_label, alignment=Qt.AlignLeft) + label_layout.addWidget(kdip_label, alignment=Qt.AlignLeft) + spacer = QSpacerItem(1, 1, QSizePolicy.Expanding, QSizePolicy.Minimum) + label_layout.addSpacerItem(spacer) + + self.set_style(label_widget) + layout.addWidget(label_widget) + + qt_items["performance label"] = label_widget + qt_items["real performance"] = real_label + qt_items["ideal performance"] = ideal_label + qt_items["real to ideal performance"] = kdip_label - performance_label = QLabel( - f"Сокращение длительности: фактическое = {tesla_TWC} %" - ) - #f"идеальное = {tesla_ideal} %; КДИП = {TWC_ideal}%" - self.set_style(performance_label) - layout.addWidget(performance_label) - performance_label.update() def _build_widget(self, data: list[Any]) -> QWidget: """ @@ -170,6 +190,7 @@ class PlotWidget(BasePlotWidget): plot_layout = pg.GraphicsLayoutWidget() reg_items = {"real":{}, "ideal":{}} curve_items = {"real":{}, "ideal":{}} + qt_items = {} dataframe, points_pocket, useful_data = data tesla_time = useful_data["tesla_time"] @@ -288,7 +309,7 @@ class PlotWidget(BasePlotWidget): plot_item.setXLink(main_plot) if settings["performance"] and not dat_is_none: - self._add_performance_label(result_layout, TWC_time, ideal_time, tesla_time) + self._add_performance_label(result_layout, TWC_time, ideal_time, tesla_time, qt_items) plot_layout.addItem(plot_item, widget_num, 0) @@ -299,7 +320,7 @@ class PlotWidget(BasePlotWidget): main_plot.sigXRangeChanged.connect(lambda _, plot=main_plot, region=ROI_region: self._sync_navigator_with_main(main_plot=plot, region=region)) result_layout.addWidget(plot_layout) - return result_widget, reg_items, curve_items + return result_widget, reg_items, curve_items, qt_items def build(self, data: list[list[Any]]) -> None: """ diff --git a/src/gui/reportGui.py b/src/gui/reportGui.py index ab8e62b..b0c6e60 100644 --- a/src/gui/reportGui.py +++ b/src/gui/reportGui.py @@ -13,7 +13,7 @@ class ReportSettings(QtWidgets.QWidget): super().__init__(parent) #self._tab_cashe = LRUCache(maxsize=1000) - def build(self, index, reg_items: dict, curve_items: dict) -> None: + def build(self, index, reg_items: dict, curve_items: dict, qt_items: dict) -> None: """Создает ParameterTree для элементов всех графиков выбранной вкладки""" try: self._clear() @@ -30,12 +30,13 @@ class ReportSettings(QtWidgets.QWidget): self._tab_cashe[index] = body""" body= [ self._generate_reg_params(reg_items), - self._generate_curve_params(curve_items) + self._generate_curve_params(curve_items), + self._generate_qt_params(qt_items) ] # Добавляем параметры в дерево params = Parameter.create(name='params', type='group', children=body) params.sigTreeStateChanged.connect( - lambda: self._update_settings(reg_items, curve_items, params) + lambda: self._update_settings(reg_items, curve_items, qt_items, params) ) param_tree.setParameters(params, showTop=False) except: @@ -58,6 +59,19 @@ class ReportSettings(QtWidgets.QWidget): else: self.setLayout(QtWidgets.QVBoxLayout()) + def _generate_qt_params(self, qt_items: dict) -> dict: + """Создает qt элементы""" + res = {'name': 'Qt elements', 'type': 'group', 'children':[ + {'name': key, 'type': 'group', 'children': self._create_qt_samples(item)} for key, item in qt_items.items() + ]} + return res + + def _create_qt_samples(self, item: Union[QtWidgets.QWidget, QtWidgets.QLabel]) -> dict: + visibility = item.isVisible() + return [ + {'name': 'Visibility', 'type': 'bool', 'value': visibility} + ] + def _generate_reg_params(self, reg_items: dict) -> dict: @@ -128,7 +142,8 @@ class ReportSettings(QtWidgets.QWidget): def _update_settings(self, reg_items: dict, - curve_items: dict, + curve_items: dict, + qt_items: dict, params: Parameter) -> None: """Задает параметры элементов в соответствии с paramTree""" @@ -138,6 +153,8 @@ class ReportSettings(QtWidgets.QWidget): real_plots = params.child("Plots").child("Real plots") ideal_plots = params.child("Plots").child("Ideal plots") + + qt_settings = params.child("Qt elements") self._set_sector_settings(reg_items["real"], real_sectors) self._set_sector_settings(reg_items["ideal"], ideal_sectors) @@ -146,6 +163,8 @@ class ReportSettings(QtWidgets.QWidget): for key, item_dict in curve_items["ideal"].items(): self._set_plot_settings(item_dict, ideal_plots.child(key)) + self._set_qt_settings(qt_items, qt_settings) + def _set_sector_settings(self, sectors: dict, settings: Parameter) -> None: @@ -168,7 +187,7 @@ class ReportSettings(QtWidgets.QWidget): reg.setBrush(brush) def _set_plot_settings(self, - curves:dict, + curves: dict, settings: Parameter) -> None: """Задает параметры кривых в соответствии с настройками""" @@ -185,4 +204,15 @@ class ReportSettings(QtWidgets.QWidget): curve.setPen(pen) else: item.setVisible(visibility) - item.setPen(pen) \ No newline at end of file + item.setPen(pen) + + def _set_qt_settings(self, + qt_items: dict, + settings: Parameter) -> None: + + """Задает параметры Qt элементов в соответствии с настройками""" + + for key, item in qt_items.items(): + sample = settings.child(key) + visibility = sample.child("Visibility").value() + item.setVisible(visibility) \ No newline at end of file