/
zinskiy09
/
Align3.0
Обзор
Документация
Войти
/
zinskiy09
/
Align3.0
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
AlignGUI/conrollers/device_controller.py
77 строк
3 KB
Sasha
add project files
17 сен 2025, 06:48
17 сен 2025, 06:48
323d13e
Код
Авторство
О чём код?
class DeviceController: def __init__(self): self.models = {} # {model_name: model} self.views = [] # Словарь: имя сигнала -> метод view self.signal_to_method = { 'feedback_values_updated': self._call_update_plot, 'coords_updated': self._call_set_coords, 'tab_index_updated': self._call_switch_tab, 'feedback_values_2d_updated': self._call_update_image, 'max_value_updated': self._call_update_4d, 'map_point': self._call_set_map_point, 'json_data_updated': self._call_json_data } self.last_model = None # Новая переменная для хранения последней модели def register_model(self, name, model): """ Регистрирует модель и подписывается на её сигналы. """ self.models[name] = model for attr in dir(model): if attr.endswith("_updated"): signal = getattr(model, attr) signal.connect(lambda value, sig=attr, mdl=model: self._handle_signal(sig, value, mdl)) def register_view(self, view): self.views.append(view) def _handle_signal(self, signal_name, value, model): """ Обработчик всех сигналов моделей. """ self.last_model = model # Сохраняем последнюю модель handler = self.signal_to_method.get(signal_name) if handler and self.views: handler(value) def _call_set_map_point(self, data): self.views[0].update_map_point(data) def _call_update_plot(self, data): self.views[0].update_plot(data) def _call_json_data(self, data): print('tut') self.views[0].update_json(data) def _call_update_image(self, data): self.views[0].update_image(data) def _call_switch_tab(self, index): self.views[0].switch_tab(index) def _call_set_coords(self, coords): self.views[0].set_coords(coords) def _call_update_4d(self, data): self.views[0].update_4d(data) def move_positioner(self, x, y): """Пример команды, которую можно вызвать для всех или конкретных моделей""" self.last_model.move_axis("Ax1", x) self.last_model.move_axis("Ax2", y) def call_tango_command(self, command_name, *args): """Вызывает команду на всех моделях или только на последней""" print('Call') if self.last_model is not None: # Вызов команды только на последней модели return self.last_model.call_tango_command(command_name, *args) else: print("⚠️ Нет активной модели") return None