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?
Japan - Plan around max visa duration
Using theabspage from the 'perpage' package
"You are your self first supporter", a more proper way to say it
Why was the small council so happy for Tyrion to become the Master of Coin?
Can I use wish to become the ruler of all dragons?
Methods for deciding between [odd number] players
How to report a triplet of septets in NMR tabulation?
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”?
Is it possible to make sharp wind that can cut stuff from afar?
How did the USSR manage to innovate in an environment characterized by government censorship and high bureaucracy?
Can I interfere when another PC is about to be attacked?
Proof for divisibility of polynomials.
How do we improve the relationship with a client software team that performs poorly and is becoming less collaborative?
Email Account under attack (really) - anything I can do?
I’m planning on buying a laser printer but concerned about the life cycle of toner in the machine
declaring a variable twice in IIFE
Why don't electromagnetic waves interact with each other?
What is the command to reset a PC without deleting any files
What typically incentivizes a professor to change jobs to a lower ranking university?
Is the language p and n are natural numbers and there's no prime number in [p,p+n] belongs to NP class?
Python: Add Submenu
Has the BBC provided arguments for saying Brexit being cancelled is unlikely?
Prevent a directory in /tmp from being deleted
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 1 hour ago
metaphor_set
4,5201721
4,5201721
asked 6 hours ago
AivanF.AivanF.
1627
1627
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'
#axis_from = property_from
#axis_to = property_to
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(OBJECT_OT_myoperator.bl_idname)
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(task_func)
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(task_func)
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'
#axis_from = property_from
#axis_to = property_to
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(OBJECT_OT_myoperator.bl_idname)
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(task_func)
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(task_func)
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'
#axis_from = property_from
#axis_to = property_to
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(OBJECT_OT_myoperator.bl_idname)
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(task_func)
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(task_func)
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'
#axis_from = property_from
#axis_to = property_to
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(OBJECT_OT_myoperator.bl_idname)
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(task_func)
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(task_func)
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'
#axis_from = property_from
#axis_to = property_to
def execute(self, context):
# ...affairs...
return 'FINISHED'
def task_func(self, context):
self.layout.operator(OBJECT_OT_myoperator.bl_idname)
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(task_func)
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(task_func)
bpy.types.VIEW3D_MT_object.remove(menu_func)
if __name__ == "__main__":
register()
answered 4 hours ago
batFINGERbatFINGER
26.7k52977
26.7k52977
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