@@ -474,10 +474,10 @@ def parse_elffile(self, path):
474474 for row , val in self .Vals .items ():
475475 var = self .Vars [val .name ]
476476 if val .addr != var .addr :
477- val = val ._replace (addr = var .addr )
477+ self . Vals [ row ] = self . Vals [ row ] ._replace (addr = var .addr )
478478 if val .size != var .size :
479- typ , fmt = self .len2type [var .size ]
480- val = val ._replace (size = var .size , typ = typ , fmt = fmt )
479+ typ , fmt = self .len2type [var .size ][ 0 ]
480+ self . Vals [ row ] = self . Vals [ row ] ._replace (size = var .size , typ = typ , fmt = fmt )
481481
482482 self .tblVar_redraw ()
483483
@@ -495,12 +495,13 @@ def tblVar_redraw(self):
495495 for series in self .PlotChart .series ():
496496 self .PlotChart .removeSeries (series )
497497
498- self .tblVar .insertRow (0 )
499-
500498 for row , val in self .Vals .items ():
501499 self .tblVar .insertRow (row )
502500 self .tblVar_setRow (row , val )
503501
502+ if self .tblVar .rowCount () < self .N_CURVE :
503+ self .tblVar .insertRow (self .tblVar .rowCount ())
504+
504505 def tblVar_setRow (self , row : int , val : Valuable ):
505506 self .tblVar .setItem (row , 0 , QTableWidgetItem (val .name ))
506507 self .tblVar .setItem (row , 1 , QTableWidgetItem (f'{ val .addr :08X} ' ))
@@ -519,30 +520,28 @@ def on_tblVar_cellDoubleClicked(self, row, column):
519520 if self .btnOpen .text () == '关闭连接' : return
520521
521522 if column < 3 :
522- if len (self .Vals ) == self .N_CURVE : return
523-
524523 dlg = VarDialog (self , row )
525524 if dlg .exec () == QDialog .Accepted :
526- var = self .Vars [dlg .cmbVar .currentText ()]
525+ var = self .Vars [dlg .cmbName .currentText ()]
527526 typ , fmt = dlg .cmbType .currentText (), dlg .cmbType .currentData ()
528527
529528 self .Vals [row ] = Valuable (var .name , var .addr , var .size , typ , fmt , True )
530529
531530 self .tblVar_setRow (row , self .Vals [row ])
532531
533- if row == self .tblVar .rowCount () - 1 : # the last row
532+ if self . tblVar . rowCount () < self . N_CURVE and row == self .tblVar .rowCount () - 1 :
534533 self .tblVar .insertRow (self .tblVar .rowCount ())
535534
536535 elif column == 3 :
537- if row != self .tblVar .rowCount () - 1 : # not last row
536+ if self .tblVar .item ( row , 3 ):
538537 self .Vals [row ] = self .Vals [row ]._replace (show = not self .Vals [row ].show )
539538
540539 self .tblVar .item (row , 3 ).setText ('显示' if self .Vals [row ].show else '不显示' )
541540
542541 self .PlotCurve [row ].setVisible (self .Vals [row ].show )
543542
544543 elif column == 4 :
545- if row != self .tblVar .rowCount () - 1 : # not last row
544+ if self .tblVar .item ( row , 4 ):
546545 self .Vals .pop (row )
547546 self .Vals = {i : val for i , val in enumerate (self .Vals .values ())}
548547
@@ -576,20 +575,47 @@ def closeEvent(self, evt):
576575 self .conf .write (open ('setting.ini' , 'w' , encoding = 'utf-8' ))
577576
578577
578+
579+ from PyQt5 .QtWidgets import QSizePolicy , QDialogButtonBox
580+
579581class VarDialog (QDialog ):
580582 def __init__ (self , parent , row ):
581583 super (VarDialog , self ).__init__ (parent )
582584
583- uic .loadUi ('VarDialog.ui' , self )
585+ self .resize (400 , 100 )
586+ self .setWindowTitle ('VarDialog' )
587+
588+ self .cmbType = QtWidgets .QComboBox (self )
589+ self .cmbType .setMinimumSize (QtCore .QSize (80 , 0 ))
590+
591+ self .cmbName = QtWidgets .QComboBox (self )
592+ self .cmbName .setSizePolicy (QSizePolicy .Expanding , QSizePolicy .Fixed )
593+ self .cmbName .currentTextChanged .connect (self .on_cmbName_currentTextChanged )
584594
585- self .cmbVar .addItems (parent .Vars .keys ())
595+ self .hLayout = QtWidgets .QHBoxLayout ()
596+ self .hLayout .addWidget (QtWidgets .QLabel ('变量:' , self ))
597+ self .hLayout .addWidget (self .cmbName )
598+ self .hLayout .addWidget (QtWidgets .QLabel (' ' , self ))
599+ self .hLayout .addWidget (QtWidgets .QLabel ('类型:' , self ))
600+ self .hLayout .addWidget (self .cmbType )
601+
602+ self .btnBox = QtWidgets .QDialogButtonBox (QDialogButtonBox .Ok | QDialogButtonBox .Cancel , self )
603+ self .btnBox .accepted .connect (self .accept )
604+ self .btnBox .rejected .connect (self .reject )
605+
606+ self .vLayout = QtWidgets .QVBoxLayout (self )
607+ self .vLayout .addLayout (self .hLayout )
608+ self .vLayout .addItem (QtWidgets .QSpacerItem (20 , 40 , QSizePolicy .Minimum , QSizePolicy .Expanding ))
609+ self .vLayout .addWidget (self .btnBox )
610+
611+ self .cmbName .addItems (parent .Vars .keys ())
586612
587613 if parent .tblVar .item (row , 0 ):
588- self .cmbVar .setCurrentText (parent .tblVar .item (row , 0 ).text ())
614+ self .cmbName .setCurrentText (parent .tblVar .item (row , 0 ).text ())
589615 self .cmbType .setCurrentText (parent .tblVar .item (row , 2 ).text ())
590616
591617 @pyqtSlot (str )
592- def on_cmbVar_currentIndexChanged (self , name ):
618+ def on_cmbName_currentTextChanged (self , name ):
593619 size = self .parent ().Vars [name ].size
594620
595621 self .cmbType .clear ()
0 commit comments