@@ -418,11 +418,19 @@ def apply():
418418 def __on_setting_changed (self , first_level_key , second_level_key , value ):
419419 if first_level_key != "basic_safety_settings" :
420420 return
421- if second_level_key == "safety_switch" :
421+ # 只在状态不同时才更新,避免不必要的信号触发
422+ if (
423+ second_level_key == "safety_switch"
424+ and self .safety_switch .isChecked () != bool (value )
425+ ):
422426 self .safety_switch .setChecked (bool (value ))
423- elif second_level_key == "totp_switch" :
427+ elif second_level_key == "totp_switch" and self .totp_switch .isChecked () != bool (
428+ value
429+ ):
424430 self .totp_switch .setChecked (bool (value ))
425- elif second_level_key == "usb_switch" :
431+ elif second_level_key == "usb_switch" and self .usb_switch .isChecked () != bool (
432+ value
433+ ):
426434 self .usb_switch .setChecked (bool (value ))
427435 enabled = password_is_configured ()
428436 self .totp_switch .setEnabled (enabled )
@@ -721,21 +729,45 @@ def __on_ops_setting_changed(self, first_level_key, second_level_key, value):
721729 if first_level_key != "basic_safety_settings" :
722730 return
723731 self ._ensure_ops_disabled_if_no_password ()
724- if second_level_key == "show_hide_floating_window_switch" :
732+ # 只在状态不同时才更新,避免不必要的信号触发
733+ if (
734+ second_level_key == "show_hide_floating_window_switch"
735+ and self .show_hide_floating_window_switch .isChecked () != bool (value )
736+ ):
725737 self .show_hide_floating_window_switch .setChecked (bool (value ))
726- elif second_level_key == "restart_switch" :
738+ elif (
739+ second_level_key == "restart_switch"
740+ and self .restart_switch .isChecked () != bool (value )
741+ ):
727742 self .restart_switch .setChecked (bool (value ))
728- elif second_level_key == "exit_switch" :
743+ elif second_level_key == "exit_switch" and self .exit_switch .isChecked () != bool (
744+ value
745+ ):
729746 self .exit_switch .setChecked (bool (value ))
730- elif second_level_key == "open_settings_switch" :
747+ elif (
748+ second_level_key == "open_settings_switch"
749+ and self .open_settings_switch .isChecked () != bool (value )
750+ ):
731751 self .open_settings_switch .setChecked (bool (value ))
732- elif second_level_key == "diagnostic_export_switch" :
752+ elif (
753+ second_level_key == "diagnostic_export_switch"
754+ and self .diagnostic_export_switch .isChecked () != bool (value )
755+ ):
733756 self .diagnostic_export_switch .setChecked (bool (value ))
734- elif second_level_key == "data_export_switch" :
757+ elif (
758+ second_level_key == "data_export_switch"
759+ and self .data_export_switch .isChecked () != bool (value )
760+ ):
735761 self .data_export_switch .setChecked (bool (value ))
736- elif second_level_key == "import_overwrite_switch" :
762+ elif (
763+ second_level_key == "import_overwrite_switch"
764+ and self .import_overwrite_switch .isChecked () != bool (value )
765+ ):
737766 self .import_overwrite_switch .setChecked (bool (value ))
738- elif second_level_key == "import_version_mismatch_switch" :
767+ elif (
768+ second_level_key == "import_version_mismatch_switch"
769+ and self .import_version_mismatch_switch .isChecked () != bool (value )
770+ ):
739771 self .import_version_mismatch_switch .setChecked (bool (value ))
740772
741773 def _ensure_ops_disabled_if_no_password (self ):
@@ -763,10 +795,12 @@ def _ensure_ops_disabled_if_no_password(self):
763795 ("import_version_mismatch_switch" , self .import_version_mismatch_switch ),
764796 ]:
765797 try :
766- sw .blockSignals (True )
767- sw .setChecked (False )
768- sw .blockSignals (False )
769- update_settings ("basic_safety_settings" , key , False )
798+ # 检查开关当前状态,如果已经是False,就不需要再次更新
799+ if sw .isChecked ():
800+ sw .blockSignals (True )
801+ sw .setChecked (False )
802+ sw .blockSignals (False )
803+ update_settings ("basic_safety_settings" , key , False )
770804 except Exception :
771805 pass
772806
0 commit comments