diff --git a/app.py b/app.py index b2ffa89..2c66308 100644 --- a/app.py +++ b/app.py @@ -29,10 +29,6 @@ class MainWindow(QWidget): # 初始化日志系统 self.log_handler = setup_logger() - - # 加载配置文件 - self.config = self.load_config() - # 初始化服务 ServiceManager.instance().init_services("192.168.5.4", 12345) # 初始化应用控制器 @@ -46,9 +42,13 @@ class MainWindow(QWidget): # 设置日志处理器的目标窗口 self.log_handler.set_widget(self.widget_log) + # 加载配置文件 + self.config = self.load_config() + # 设置通道显示数量 channel_count = self.config['channels']['count'] - print(f"channel_count: {channel_count}") + logger.info(f"通道数量: {channel_count}") + self.widget_channel.set_visible_channels(channel_count) self.widget_main.ui.ListWidget_vLayout.addWidget(self.widget_card) @@ -64,7 +64,6 @@ class MainWindow(QWidget): self.widget_main.ui.ListWidget_vLayout.addWidget(self.test_button) self.create_filter_widget() - print("create_filter_widget") self.setup_connections() def load_config(self): @@ -140,7 +139,7 @@ if __name__ == '__main__': app = QApplication(sys.argv) main_window = MainWindow() - logger.info("开始添加测试卡片") + logger.info("软件启动") # for i in range(1, 6): # data = CardData( # name=f"测试项目 {i}", diff --git a/application/__pycache__/__init__.cpython-313.pyc b/application/__pycache__/__init__.cpython-313.pyc index cce8e1e..7d14cf3 100644 Binary files a/application/__pycache__/__init__.cpython-313.pyc and b/application/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/__pycache__/application_controller.cpython-313.pyc b/application/__pycache__/application_controller.cpython-313.pyc index 6b86a53..5a18b96 100644 Binary files a/application/__pycache__/application_controller.cpython-313.pyc and b/application/__pycache__/application_controller.cpython-313.pyc differ diff --git a/component/__pycache__/__init__.cpython-313.pyc b/component/__pycache__/__init__.cpython-313.pyc index e4bbba2..9df0975 100644 Binary files a/component/__pycache__/__init__.cpython-313.pyc and b/component/__pycache__/__init__.cpython-313.pyc differ diff --git a/component/widget_card/__pycache__/__init__.cpython-313.pyc b/component/widget_card/__pycache__/__init__.cpython-313.pyc index e25210c..2fdf8bb 100644 Binary files a/component/widget_card/__pycache__/__init__.cpython-313.pyc and b/component/widget_card/__pycache__/__init__.cpython-313.pyc differ diff --git a/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc b/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc index 8101f0f..d702ce5 100644 Binary files a/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc and b/component/widget_card/__pycache__/ui_widget_card.cpython-313.pyc differ diff --git a/component/widget_card/__pycache__/widget_card.cpython-313.pyc b/component/widget_card/__pycache__/widget_card.cpython-313.pyc index 16b2250..3dc688d 100644 Binary files a/component/widget_card/__pycache__/widget_card.cpython-313.pyc and b/component/widget_card/__pycache__/widget_card.cpython-313.pyc differ diff --git a/component/widget_channel/__pycache__/__init__.cpython-313.pyc b/component/widget_channel/__pycache__/__init__.cpython-313.pyc index 0197430..5afb715 100644 Binary files a/component/widget_channel/__pycache__/__init__.cpython-313.pyc and b/component/widget_channel/__pycache__/__init__.cpython-313.pyc differ diff --git a/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc b/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc index 8eb9b52..0910438 100644 Binary files a/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc and b/component/widget_channel/__pycache__/ui_widget_channel.cpython-313.pyc differ diff --git a/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc b/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc index 10f2576..abc4861 100644 Binary files a/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc and b/component/widget_channel/__pycache__/widget_channel.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc b/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc index 55a44f6..f41c12b 100644 Binary files a/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc and b/component/widget_filter/__pycache__/Ui_widget.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/__init__.cpython-313.pyc b/component/widget_filter/__pycache__/__init__.cpython-313.pyc index e4f8884..a3637de 100644 Binary files a/component/widget_filter/__pycache__/__init__.cpython-313.pyc and b/component/widget_filter/__pycache__/__init__.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc index 44d51b7..03acdf0 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_componet.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc index 997f677..2e936c3 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_controller.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc b/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc index 899929f..dae53d9 100644 Binary files a/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc and b/component/widget_filter/__pycache__/audio_filter_model.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc b/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc index d176b66..b09ea10 100644 Binary files a/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc and b/component/widget_filter/__pycache__/checkbox_header.cpython-313.pyc differ diff --git a/component/widget_filter/__pycache__/resources.cpython-313.pyc b/component/widget_filter/__pycache__/resources.cpython-313.pyc index 760073e..835b1ae 100644 Binary files a/component/widget_filter/__pycache__/resources.cpython-313.pyc and b/component/widget_filter/__pycache__/resources.cpython-313.pyc differ diff --git a/component/widget_filter/audio_filter_componet.py b/component/widget_filter/audio_filter_componet.py index b1cc684..020e31a 100644 --- a/component/widget_filter/audio_filter_componet.py +++ b/component/widget_filter/audio_filter_componet.py @@ -531,6 +531,81 @@ class AudioFilterWidget(QWidget): self.ui.pushButton.clicked.connect(lambda: self.send_params_clicked.emit()) # self.ui.pushButton_10.clicked.connect(lambda: self.get_params_clicked.emit()) + def disconnect_all_signals(self): + """安全地断开所有UI信号连接""" + # 断开参数输入框信号 + try: + self.ui.lineEdit_11.textChanged.disconnect() + self.ui.lineEdit_10.textChanged.disconnect() + self.ui.lineEdit_13.textChanged.disconnect() + self.ui.lineEdit_12.textChanged.disconnect() + except TypeError: + # 信号可能未连接,忽略错误 + pass + + # 断开滑块信号 + try: + self.ui.verticalSlider.valueChanged.disconnect() + self.ui.verticalSlider_2.valueChanged.disconnect() + self.ui.verticalSlider_3.valueChanged.disconnect() + self.ui.verticalSlider_4.valueChanged.disconnect() + except TypeError: + pass + + # 断开表格信号 + try: + self.ui.tableWidget.itemSelectionChanged.disconnect() + self.ui.tableWidget.itemChanged.disconnect() + except TypeError: + pass + + # 断开按钮信号 + try: + self.ui.pushButton_7.clicked.disconnect() # 添加滤波器按钮 + self.ui.pushButton_8.clicked.disconnect() # 删除滤波器按钮 + self.ui.pushButton.clicked.disconnect() # 发送参数按钮 + except TypeError: + pass + + def connect_param_signals(self): + """重新连接所有UI信号""" + # 连接参数输入框信号 + self.ui.lineEdit_11.textChanged.connect( + lambda v: self._on_param_changed('delay', v) + ) + self.ui.lineEdit_10.textChanged.connect( + lambda v: self._on_param_changed('volume', v) + ) + self.ui.lineEdit_13.textChanged.connect( + lambda v: self._on_param_changed('mix_right', v) + ) + self.ui.lineEdit_12.textChanged.connect( + lambda v: self._on_param_changed('mix_left', v) + ) + + # 连接滑块信号 + self.ui.verticalSlider.valueChanged.connect( + lambda v: self._on_slider_changed('freq', v) + ) + self.ui.verticalSlider_2.valueChanged.connect( + lambda v: self._on_slider_changed('q', v) + ) + self.ui.verticalSlider_3.valueChanged.connect( + lambda v: self._on_slider_changed('gain', v) + ) + self.ui.verticalSlider_4.valueChanged.connect( + lambda v: self._on_slider_changed('slope', v) + ) + + # 连接表格信号 + self.ui.tableWidget.itemSelectionChanged.connect(self._on_selection_changed) + self.ui.tableWidget.itemChanged.connect(self._on_table_item_changed) + + # 连接按钮信号 + self.ui.pushButton_7.clicked.connect(self._on_add_filter_clicked) + self.ui.pushButton_8.clicked.connect(self._on_delete_filter_clicked) + self.ui.pushButton.clicked.connect(lambda: self.send_params_clicked.emit()) + def setup_table(self): """初始化表格设置""" self.header_view = SCheckBoxHeaderView(0, Qt.Horizontal) @@ -918,11 +993,17 @@ class AudioFilterWidget(QWidget): def updateUI(self): """手动触发UI更新""" if hasattr(self, 'model'): - # 清空现有数据 - self.clear_ui_data() - # 从模型更新数据 - self.set_all_params(self.model.to_widget_params()) - + # 断开所有信号连接 + self.disconnect_all_signals() + try: + # 清空现有数据 + self.clear_ui_data() + # 从模型更新数据 + self.set_all_params(self.model.to_widget_params()) + finally: + # 确保信号总是被重新连接,即使发生异常 + self.connect_param_signals() + def clear_ui_data(self): """清空UI中的所有数据""" # 清空基础参数 @@ -944,27 +1025,6 @@ class AudioFilterWidget(QWidget): self.ui.verticalSlider_3.setValue(0) self.ui.verticalSlider_4.setValue(0) - def disconnect_param_signals(self): - """断开参数信号连接""" - self.ui.lineEdit_11.textChanged.disconnect() - self.ui.lineEdit_10.textChanged.disconnect() - self.ui.lineEdit_13.textChanged.disconnect() - self.ui.lineEdit_12.textChanged.disconnect() - - def connect_param_signals(self): - """重新连接参数信号""" - self.ui.lineEdit_11.textChanged.connect( - lambda v: self._on_param_changed('delay', v) - ) - self.ui.lineEdit_10.textChanged.connect( - lambda v: self._on_param_changed('volume', v) - ) - self.ui.lineEdit_13.textChanged.connect( - lambda v: self._on_param_changed('mix_right', v) - ) - self.ui.lineEdit_12.textChanged.connect( - lambda v: self._on_param_changed('mix_left', v) - ) if __name__ == "__main__": import sys diff --git a/component/widget_filter/audio_filter_controller.py b/component/widget_filter/audio_filter_controller.py index 08b24df..887ed7a 100644 --- a/component/widget_filter/audio_filter_controller.py +++ b/component/widget_filter/audio_filter_controller.py @@ -187,52 +187,38 @@ class AudioFilterController(QObject): try: self.state = AudioControllerState.UPDATING struct_data = res.data - print("struct_data:", struct_data) - print("\n") # 将结构体数据转换为模型数据 model_data = self._convert_struct_data_to_model(struct_data) - # 暂时断开widget的信号连接 - if self.widget: - self.widget.disconnect_param_signals() + # 更新通道参数 + self.model.set_channel_params(model_data['channel_params']) - try: - # 清除UI数据 - self.widget.clear_ui_data() + # 清除现有滤波器 + self.model.filters.clear() + + if model_data['channel_id'] == self.model.channel_id: + # 只添加有效的滤波器(所有参数都不为0) + valid_filters = [ + filter_param for filter_param in model_data['filters'] + if any([ + filter_param.frequency != 0, + filter_param.q_value != 0, + filter_param.gain != 0, + filter_param.slope != 0 + ]) + ] - # 更新通道参数 - self.model.set_channel_params(model_data['channel_params']) + # 更新model的filters列表 + self.model.filters = valid_filters - # 清除现有滤波器 - self.model.filters.clear() - - if model_data['channel_id'] == self.model.channel_id: - # 只添加有效的滤波器(所有参数都不为0) - valid_filters = [ - filter_param for filter_param in model_data['filters'] - if any([ - filter_param.frequency != 0, - filter_param.q_value != 0, - filter_param.gain != 0, - filter_param.slope != 0 - ]) - ] - - # 更新model的filters列表 - self.model.filters = valid_filters - - print("有效的滤波器数量:", len(self.model.filters)) - print(f"bbbbb, self.model.channel_params:{self.model.channel_params}") - - # 从模型更新数据 - print(f"aaaaa to_widget_params:{self.model.to_widget_params()}") - self.widget.set_all_params(self.model.to_widget_params()) - - finally: - # 恢复widget的信号连接 - if self.widget: - self.widget.connect_param_signals() + print("有效的滤波器数量:", len(self.model.filters)) + + # 使用widget的updateUI方法来更新UI + if self.widget: + self.widget.updateUI() + + self.state = AudioControllerState.IDLE except Exception as e: self.state = AudioControllerState.ERROR diff --git a/component/widget_log/__pycache__/log_handler.cpython-313.pyc b/component/widget_log/__pycache__/log_handler.cpython-313.pyc index f87d8e4..4242896 100644 Binary files a/component/widget_log/__pycache__/log_handler.cpython-313.pyc and b/component/widget_log/__pycache__/log_handler.cpython-313.pyc differ diff --git a/component/widget_log/__pycache__/ui_widget_log.cpython-313.pyc b/component/widget_log/__pycache__/ui_widget_log.cpython-313.pyc index 259fa81..2bde4ef 100644 Binary files a/component/widget_log/__pycache__/ui_widget_log.cpython-313.pyc and b/component/widget_log/__pycache__/ui_widget_log.cpython-313.pyc differ diff --git a/component/widget_log/__pycache__/widget_log.cpython-313.pyc b/component/widget_log/__pycache__/widget_log.cpython-313.pyc index 9bff257..7a43192 100644 Binary files a/component/widget_log/__pycache__/widget_log.cpython-313.pyc and b/component/widget_log/__pycache__/widget_log.cpython-313.pyc differ diff --git a/component/widget_main/__pycache__/__init__.cpython-313.pyc b/component/widget_main/__pycache__/__init__.cpython-313.pyc index 806555a..65cf329 100644 Binary files a/component/widget_main/__pycache__/__init__.cpython-313.pyc and b/component/widget_main/__pycache__/__init__.cpython-313.pyc differ diff --git a/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc b/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc index db68175..bc097b4 100644 Binary files a/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc and b/component/widget_main/__pycache__/ui_widget_main.cpython-313.pyc differ diff --git a/component/widget_main/__pycache__/widget_main.cpython-313.pyc b/component/widget_main/__pycache__/widget_main.cpython-313.pyc index 279f774..f6c4131 100644 Binary files a/component/widget_main/__pycache__/widget_main.cpython-313.pyc and b/component/widget_main/__pycache__/widget_main.cpython-313.pyc differ diff --git a/param_struct_test b/param_struct_test index 5d3fc10..0e1cec2 160000 --- a/param_struct_test +++ b/param_struct_test @@ -1 +1 @@ -Subproject commit 5d3fc10c5ddbadfb5b8cd4825355fbabc9a42438 +Subproject commit 0e1cec2c5ddf5e17a624d18d503b8a41cac38def