Is there a way to make a custom pie menu in 2.8? I'd like to add one for switching between trackball and turntable navigation. It gets very annoying going into preferences when you just want to use trackball for sculpting and turntable for other things.


1 Answer 1


there are two ways to add custom pie menus.

  1. get the Pie Menu Editor addon (paid).
  2. code it yourself, its not that difficult, you can use my pie menu addon as a starting point, if you have never coded you might want to learn about python first or just copy the code below and put it in a file that ends with .py go to the Add-ons tab and click install, chose the file that you made with the code below.

This is a basic addon that should do the job, the default keymap is Ctrl + D

import bpy
from bpy.types import Menu

bl_info = {
    "name": "S.Simple Pie Menu",
    "author": "Syler",
    "version": (0, 0, 0, 1),
    "description": "Adds Pie Menus",
    "blender": (2, 80, 0),
    "category": "3D view"

addon_keymaps = []

def add_hotkey():

    wm = bpy.context.window_manager
    kc = wm.keyconfigs.addon

    if not kc:
        print('Keymap Error')
    # object Mode
    km = kc.keymaps.new(name='Object Mode', space_type='EMPTY')
    # here you can chose the keymapping.
    kmi = km.keymap_items.new(
        VIEW3D_OT_PIE_template_call.bl_idname, 'D', 'PRESS', ctrl=True, shift=False)
    addon_keymaps.append((km, kmi))

def remove_hotkey():
    for km, kmi in addon_keymaps:


class VIEW3D_MT_PIE_template(Menu):
    bl_label = 'S.Menu Navigation'
    def draw(self, context):
        layout = self.layout
        prefs = context.preferences
        inputs = prefs.inputs
        pie = layout.menu_pie()
        pie.prop(inputs, "view_rotate_method", expand=True)

class VIEW3D_OT_PIE_template_call(bpy.types.Operator):
    bl_idname = 'sop.sm_template'
    bl_label = 'S.Menu Navigation'
    bl_description = 'Calls pie menu'
    bl_options = {'REGISTER', 'UNDO'}
    def execute(self, context):
        return {'FINISHED'}

def register():

def unregister():

if __name__ == "__main__":

  • $\begingroup$ If i interpret this code correctly What ur doing over here is that u create a menu and call it using the operator which u in turn call it a through a shortcut (keymap) $\endgroup$ Commented Mar 26, 2021 at 6:09

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .