Python: Add Submenu The 2019 Stack Overflow Developer Survey Results Are InAdd uv_layer to mesh, add uv-coords, with pythonHow to create toggle buttons in blender GUI from dynamic list of items?How to add a driver via python?Add a group instance with pythonPython: add object, then change propertiesCopying blender log to a scriptadd parameters (Grid, Random…) with pythonAdd camera moving along curve in PythonHow can I get the id name of a submenu?How to add a new item to the Mesh submenu of the Add Menu in this script?
Can an undergraduate be advised by a professor who is very far away?
What do these terms in Caesar's Gallic Wars mean?
Old scifi movie from the 50s or 60s with men in solid red uniforms who interrogate a spy from the past
What is the motivation for a law requiring 2 parties to consent for recording a conversation
Why “相同意思的词” is called “同义词” instead of "同意词"?
How to translate "being like"?
Getting crown tickets for Statue of Liberty
How can I define good in a religion that claims no moral authority?
Is it ethical to upload a automatically generated paper to a non peer-reviewed site as part of a larger research?
Match Roman Numerals
What could be the right powersource for 15 seconds lifespan disposable giant chainsaw?
The difference between dialogue marks
Can I have a signal generator on while it's not connected?
I am an eight letter word. What am I?
How to notate time signature switching consistently every measure
Why doesn't UInt have a toDouble()?
Deal with toxic manager when you can't quit
How do you keep chess fun when your opponent constantly beats you?
If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?
Why not take a picture of a closer black hole?
How do I free up internal storage if I don't have any apps downloaded?
What is this business jet?
Dropping list elements from nested list after evaluation
Why couldn't they take pictures of a closer black hole?
Python: Add Submenu
The 2019 Stack Overflow Developer Survey Results Are InAdd uv_layer to mesh, add uv-coords, with pythonHow to create toggle buttons in blender GUI from dynamic list of items?How to add a driver via python?Add a group instance with pythonPython: add object, then change propertiesCopying blender log to a scriptadd parameters (Grid, Random…) with pythonAdd camera moving along curve in PythonHow can I get the id name of a submenu?How to add a new item to the Mesh submenu of the Add Menu in this script?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I am creating a simple add-on in Blender. Initially I tested the code in Python console, then I wrapped it in an operator and added it to Object menu, it worked well:
class MyOperator(bpy.types.Operator):
bl_idname = 'object.MyOperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(MyOperator.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(task_func)
But now I need to add several operators and a submenu. I tried this example, and but it is not working:
class MyMenu(bpy.types.Menu):
bl_idname = 'object.MyMenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(MyMenu.bl_idname, text=MyMenu.bl_label)
def menu_func(self, context):
# None of these is working :(
self.layout.call_menu(name=MyMenu.bl_idname)
self.layout.menu(MyMenu.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(menu_func)
So, what's the problem about? How can I solve it?
python
$endgroup$
add a comment |
$begingroup$
I am creating a simple add-on in Blender. Initially I tested the code in Python console, then I wrapped it in an operator and added it to Object menu, it worked well:
class MyOperator(bpy.types.Operator):
bl_idname = 'object.MyOperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(MyOperator.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(task_func)
But now I need to add several operators and a submenu. I tried this example, and but it is not working:
class MyMenu(bpy.types.Menu):
bl_idname = 'object.MyMenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(MyMenu.bl_idname, text=MyMenu.bl_label)
def menu_func(self, context):
# None of these is working :(
self.layout.call_menu(name=MyMenu.bl_idname)
self.layout.menu(MyMenu.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(menu_func)
So, what's the problem about? How can I solve it?
python
$endgroup$
add a comment |
$begingroup$
I am creating a simple add-on in Blender. Initially I tested the code in Python console, then I wrapped it in an operator and added it to Object menu, it worked well:
class MyOperator(bpy.types.Operator):
bl_idname = 'object.MyOperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(MyOperator.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(task_func)
But now I need to add several operators and a submenu. I tried this example, and but it is not working:
class MyMenu(bpy.types.Menu):
bl_idname = 'object.MyMenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(MyMenu.bl_idname, text=MyMenu.bl_label)
def menu_func(self, context):
# None of these is working :(
self.layout.call_menu(name=MyMenu.bl_idname)
self.layout.menu(MyMenu.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(menu_func)
So, what's the problem about? How can I solve it?
python
$endgroup$
I am creating a simple add-on in Blender. Initially I tested the code in Python console, then I wrapped it in an operator and added it to Object menu, it worked well:
class MyOperator(bpy.types.Operator):
bl_idname = 'object.MyOperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(MyOperator.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(task_func)
But now I need to add several operators and a submenu. I tried this example, and but it is not working:
class MyMenu(bpy.types.Menu):
bl_idname = 'object.MyMenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(MyMenu.bl_idname, text=MyMenu.bl_label)
def menu_func(self, context):
# None of these is working :(
self.layout.call_menu(name=MyMenu.bl_idname)
self.layout.menu(MyMenu.bl_idname)
def register():
bpy.utils.register_class(MyOperator)
bpy.types.VIEW3D_MT_object.append(menu_func)
So, what's the problem about? How can I solve it?
python
python
edited Apr 7 at 18:34
metaphor_set
4,6101721
4,6101721
asked Apr 7 at 13:35
AivanF.AivanF.
1647
1647
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
There were a number of issues. From not registering menu class and having invalid bl_idname
's (no capital letters)
Here is working code. In 2.8 it is a requirement that class names reflect the bl_idname
.
import bpy
class OBJECT_OT_myoperator(bpy.types.Operator):
bl_idname = 'object.myoperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
class OBJECT_MT_mymenu(bpy.types.Menu):
bl_idname = 'object.mymenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(OBJECT_OT_myoperator.bl_idname)
def menu_func(self, context):
self.layout.menu(OBJECT_MT_mymenu.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_myoperator)
bpy.utils.register_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_myooperator)
bpy.utils.unregister_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
);
);
, "mathjax-editing");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "502"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fblender.stackexchange.com%2fquestions%2f136447%2fpython-add-submenu%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
There were a number of issues. From not registering menu class and having invalid bl_idname
's (no capital letters)
Here is working code. In 2.8 it is a requirement that class names reflect the bl_idname
.
import bpy
class OBJECT_OT_myoperator(bpy.types.Operator):
bl_idname = 'object.myoperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
class OBJECT_MT_mymenu(bpy.types.Menu):
bl_idname = 'object.mymenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(OBJECT_OT_myoperator.bl_idname)
def menu_func(self, context):
self.layout.menu(OBJECT_MT_mymenu.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_myoperator)
bpy.utils.register_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_myooperator)
bpy.utils.unregister_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
$endgroup$
add a comment |
$begingroup$
There were a number of issues. From not registering menu class and having invalid bl_idname
's (no capital letters)
Here is working code. In 2.8 it is a requirement that class names reflect the bl_idname
.
import bpy
class OBJECT_OT_myoperator(bpy.types.Operator):
bl_idname = 'object.myoperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
class OBJECT_MT_mymenu(bpy.types.Menu):
bl_idname = 'object.mymenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(OBJECT_OT_myoperator.bl_idname)
def menu_func(self, context):
self.layout.menu(OBJECT_MT_mymenu.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_myoperator)
bpy.utils.register_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_myooperator)
bpy.utils.unregister_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
$endgroup$
add a comment |
$begingroup$
There were a number of issues. From not registering menu class and having invalid bl_idname
's (no capital letters)
Here is working code. In 2.8 it is a requirement that class names reflect the bl_idname
.
import bpy
class OBJECT_OT_myoperator(bpy.types.Operator):
bl_idname = 'object.myoperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
class OBJECT_MT_mymenu(bpy.types.Menu):
bl_idname = 'object.mymenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(OBJECT_OT_myoperator.bl_idname)
def menu_func(self, context):
self.layout.menu(OBJECT_MT_mymenu.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_myoperator)
bpy.utils.register_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_myooperator)
bpy.utils.unregister_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
$endgroup$
There were a number of issues. From not registering menu class and having invalid bl_idname
's (no capital letters)
Here is working code. In 2.8 it is a requirement that class names reflect the bl_idname
.
import bpy
class OBJECT_OT_myoperator(bpy.types.Operator):
bl_idname = 'object.myoperator'
bl_label = 'MyOperator'
bl_options = 'REGISTER', 'UNDO'
def execute(self, context):
# ...affairs...
return 'FINISHED'
class OBJECT_MT_mymenu(bpy.types.Menu):
bl_idname = 'object.mymenu'
bl_label = 'MyMenu'
def draw(self, context):
layout = self.layout
layout.operator(OBJECT_OT_myoperator.bl_idname)
def menu_func(self, context):
self.layout.menu(OBJECT_MT_mymenu.bl_idname)
def register():
bpy.utils.register_class(OBJECT_OT_myoperator)
bpy.utils.register_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def unregister():
bpy.utils.unregister_class(OBJECT_OT_myooperator)
bpy.utils.unregister_class(OBJECT_MT_mymenu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
edited Apr 8 at 0:24
AivanF.
1647
1647
answered Apr 7 at 14:45
batFINGERbatFINGER
26.8k52977
26.8k52977
add a comment |
add a comment |
Thanks for contributing an answer to Blender Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fblender.stackexchange.com%2fquestions%2f136447%2fpython-add-submenu%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown