def __free_move(self) -> None: """Menu of free move mode.""" def free_move_mode_func(j: int, icon_qt: QIcon) -> Callable[[], None]: @Slot() def func() -> None: self.free_move_button.setIcon(icon_qt) self.main_canvas.set_free_move(j) self.entities_tab.setCurrentIndex(0) self.inputs_widget.variable_stop.click() return func menu = QMenu(self) for i, (text, icon, tip) in enumerate([ ("View mode", "free_move_off", "Disable free move mode."), ("Translate mode", "translate", "Edit by 2 DOF moving."), ("Rotate mode", "rotate", "Edit by 1 DOF moving."), ("Reflect mode", "reflect", "Edit by flip axis."), ]): action = QAction(QIcon(QPixmap(f":/icons/{icon}.png")), text, self) action.triggered.connect(free_move_mode_func(i, action.icon())) action.setShortcut(f"Ctrl+{i + 1}") action.setShortcutContext(Qt.WindowShortcut) action.setStatusTip(tip) menu.addAction(action) if i == 0: self.free_move_disable = action self.free_move_button.setMenu(menu)