Python: Add SubmenuAdd 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?
How to manage monthly salary
Are objects structures and/or vice versa?
Is it true that "The augmented fourth (A4) and the diminished fifth (d5) are the only aug and dim intervals that appear in diatonic scales"
Could a US political party gain complete control over the government by removing checks & balances?
Why is making salt water prohibited on Shabbat?
How can I fix this gap between bookcases I made?
What do you call something that goes against the spirit of the law, but is legal when interpreting the law to the letter?
Why is the design of haulage companies so “special”?
Eliminate empty elements from a list with a specific pattern
Unbreakable Formation vs. Cry of the Carnarium
Why is my log file so massive? 22gb. I am running log backups
Lied on resume at previous job
How to deal with fear of taking dependencies
How would photo IDs work for shapeshifters?
Is Social Media Science Fiction?
Crop image to path created in TikZ?
Is there a familial term for apples and pears?
Why do we use polarized capacitors?
Travelling to Edinburgh from India
Can I find out the caloric content of bread by dehydrating it?
What is the offset in a seaplane's hull?
aging parents with no investments
Manga about a female worker who got dragged into another world together with this high school girl and she was just told she's not needed anymore
"listening to me about as much as you're listening to this pole here"
Python: Add Submenu
Add 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 yesterday
metaphor_set
4,5201721
4,5201721
asked yesterday
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 21 hours ago
AivanF.
1647
1647
answered yesterday
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