from ui_arr_details import Ui_Widget from PySide6.QtWidgets import QWidget, QTableWidgetItem from PySide6.QtCore import Slot, Signal, SignalInstance from param_data import ParamDataArr from br_com_message import BrComMessage from br_widget_basic_plot import BrWidgetBasicPlot class BrWidgetArrDetails(QWidget, Ui_Widget): signal_read: SignalInstance = Signal(list) signal_write: SignalInstance = Signal(list) def __init__(self, parent=None): super().__init__(parent) self.setupUi(self) self.param_data: ParamDataArr = None self.updating = False self.tableWidget_val.setColumnCount(2) self.tableWidget_val.setHorizontalHeaderLabels(['Addr', 'Value']) self.tableWidget_setval.setColumnCount(2) self.tableWidget_setval.setHorizontalHeaderLabels(['Addr', 'Value']) self.tableWidget_setval.itemChanged.connect(self.on_table_setval_itemChanged) def on_table_setval_itemChanged(self, item: QTableWidgetItem): if self.updating: return # 获取编辑的行index,获取输入的值 row_index = item.row() input_val = item.text() self.param_data.setval_list[row_index] = float(input_val) print('item changed', row_index, input_val) def update_param_info(self, p_data: ParamDataArr): self.param_data = p_data self.label_addr.setText(str(p_data.addr)) self.label_name.setText(str(p_data.name)) self.label_length.setText(str(p_data.size)) self.label_details.setText(str(p_data.details)) self.update_table() def update_table(self): self.updating = True self.tableWidget_val.setRowCount(self.param_data.size) for row in range(0, self.param_data.size): self.tableWidget_val.setItem( row, 0, QTableWidgetItem( str(self.param_data.addr + row) ) ) self.tableWidget_val.setItem( row, 1, QTableWidgetItem( str(self.param_data.getval_list[row])) ) self.tableWidget_setval.setRowCount(self.param_data.size) # 增加table写功能 for row in range(0, self.param_data.size): self.tableWidget_setval.setItem( row, 0, QTableWidgetItem( str(self.param_data.addr + row) ) ) self.tableWidget_setval.setItem( row, 1, QTableWidgetItem( str(self.param_data.getval_list[row])) ) # 把设定值设置为获取到的值 self.param_data.setval_list = self.param_data.getval_list self.updating = False def update_val_list(self): for i in range(0, self.param_data.size): self.tableWidget_val.setItem(0, i, QTableWidgetItem(str(self.param_data.getval_list[i]))) def update_setval_list(self): for i in range(0, len(self.param_data.setval_list)): self.tableWidget_setval.setItem(0, i, QTableWidgetItem(str(self.param_data.setval_list[i]))) @Slot() def on_pushButton_read_clicked(self): print('[read] button clicked!') # 生成一组读取命令 _cmd_list = [] for i in range(0, self.param_data.size): _cmd_list.append( BrComMessage( BrComMessage.OP_READ, self.param_data.addr + i ) ) self.signal_read.emit(_cmd_list) @Slot() def on_pushButton_write_clicked(self): print('[write] button clicked!') _cmd_list = [] for i in range(0, self.param_data.size): _cmd_list.append( BrComMessage( BrComMessage.OP_WRITE, self.param_data.addr + i, self.param_data.getval_list[i] ) ) self.signal_write.emit(_cmd_list) @Slot() def on_pushButton_valplot_clicked(self): print('[valpolt] button clicked!') self.dialog = BrWidgetBasicPlot() self.dialog.set_chart_data(self.param_data.getval_list, self.param_data.name) self.dialog.show() @Slot() def on_pushButton_setvalplot_clicked(self): print('[setvalplot] button clicked!') if __name__ == "__main__": from PySide6.QtWidgets import QApplication import sys app = QApplication() widget = BrWidgetArrDetails() param_data = ParamDataArr(10, 'name', 'NULL', 0, 10) widget.update_param_info(param_data) widget.update_val_list() widget.update_setval_list() widget.show() sys.exit(app.exec())