I've been trying to adapt the example code in the workspaceControl documentation into a class and haven't been able to do it. Here is the documentation code:
import maya.cmds as cmds def createCustomWorkspaceControlUI(*args): cmds.columnLayout() cmds.button() cmds.button() cmds.button() cmds.workspaceControl("myCustomWorkspaceControl", retain=False, floating=True, uiScript="createCustomWorkspaceControlUI()");
And here is a simplification of how I adapted it:
import maya.cmds as cmds class ui(object): def build(self): if cmds.workspaceControl("myCustomWorkspaceControl", exists=1): cmds.deleteUI("myCustomWorkspaceControl") self.wS = cmds.workspaceControl("myCustomWorkspaceControl", retain=False, floating=True, uiScript="createCustomWorkspaceControlUI"); def createCustomWorkspaceControlUI(self, *args): print("1") o = ui() o.build()
When I execute the previous code I get the following error:
# Error: line 1: NameError: file <maya console> line 1: name 'createCustomWorkspaceControlUI' is not defined #
On the other hand, if you execute inside of Maya
def createCustomWorkspaceControlUI(self, *args): print("1")
and then execute my adapted code it will work. The documentation and errors I've been getting tell me that uiScript only accepts two kinds of input: strings and functions. I believe that methods inside a class are not accepted by the uiScript as they are technically not the same as functions. Am I wrong? Is my only solution to turn the whole ui creation into a function not part of my UI class?
Thank you in advance
Solved! Go to Solution.
Solved by onefabis. Go to Solution.
Perhaps you better to call it in this way
import maya.cmds as cmds class ui(object): def __init__(self): if cmds.workspaceControl("myCustomWSP", exists=1): cmds.deleteUI("myCustomWSP") def createCustomWorkspaceControlUI(self,*args): print args[1] def build(self): cmds.workspaceControl("myCustomWSP", uiScript="ui().createCustomWorkspaceControlUI(%s,%s)" %(10,20), retain=1, floating=1 ) ui().build()
I also wrote some numbers so you can really pass any variables to your 'createCustomWorkspaceControlUI' function
Though similar to your suggestion the real solution was as follows:
import maya.cmds as cmds class ui(object): def one(self): if cmds.workspaceControl("newControl", exists=1): cmds.deleteUI("newControl") self.wS = cmds.workspaceControl("newControl", retain=False, floating=True, uiScript="ui.two()"); @classmethod def two(cls): print("2") ui().one()
The position of the methods don't really affect the output and the @classmethod is required for it to work!
Thanks for leading me to the correct solution!
Can't edit nor delete my reply so I have, to repost... ignore the @classmethod solution I gave it works but gives more problems than it solves them. The solutionI've accepted is the best way to solve it.
Can't find what you're looking for? Ask the community or share your knowledge.