Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm using ArcGIS for Desktop 10.3.0.4322

I have a script tool which requires a parameter (folder path to a gdB, via GetParameterAsText) so that a later process can be saved there. The thing I want to do is make an Optional Boolean parameter, that when checked, automatically fills in the folder path gdB parameter. The boolean text asks the user, "Use default workspace?", to which if they check the box (boolean == True), then the folder path parameter will be automatically defaulted (saving the user a small amount of time). I have already created the boolean parameter in the script tool, I am however unaware of how to "fill in" the required parameter based on the user's boolean.

Code Snippet:

# Ask user to select the Geodatabase workspace to use for data output
userWorkspace = arcpy.GetParameterAsText(0)

# Ask user if they want to use default workspace (boolean)
useDefault = arcpy.GetParameterAsText(1)

# If user wants default workspace, then give it to the required parameter (0)
if useDefault == True:
 arcpy.env.workspace = path
else:
 # Set workspace environment based upon user's choice
 arcpy.env.workspace = userWorkspace
share|improve this question
1  
Try adding a print useDefault immediately after you set it to see what is returned. I have a suspicion (without testing) that it may be 'True'/'False' rather than 'true'/'false'. – PolyGeo Jul 9 '15 at 22:11
    
@PolyGeo - Yes, thank you for correcting me on that. It is indeed True. Will give your suggestion a try, thanks. – JumpInTheFire Jul 9 '15 at 22:17

Try adding a print useDefault immediately after you set it to see what is returned.

I have a suspicion (without testing) that it may be returning 'True'(or 'False') rather than 'true' (or 'false').

Also, arcpy.GetParameterAsText() always returns a string so you need to test for the String of 'True'(or 'False').

If you use arcpy.GetParameter() then you will be able to test for the Booleans True (or False).

share|improve this answer
1  
Also note the type changes from string on command line to unicode from toolbox. See my answer that explores PolyGeo's answer in some more detail. Bottom line: always test strings and pretend you don't know about booleans. – matt wilkie Jul 14 '15 at 17:14

Extending @PolyGeo's answer, running this snippet from the command line and from a toolbox with a single parameter set as "boolean, optional" will give slightly different returns.

import arcpy
useDefault = arcpy.GetParameterAsText(0)

# report to Arcgis message queue
arcpy.AddMessage(useDefault)
arcpy.AddMessage(type(useDefault))

# report to shell console
print useDefault
print type(useDefault)

When run from a toolbox the message is:

true
<type 'unicode'>

and from a command line, python test.py True:

True
<type 'str'>

When we change to using arcpy.GetParameter(0) the message queue result is:

1
<type 'bool'>

but the command line report remains unchanged:

True
<type 'str'>

So the useDefault parameter is not a native python boolean. You (sadly) can't use standard python idioms like if useDefault: ..., but must test against strings:

usedDefault = GetParameterAsText(0)

if not useDefault.lower() == 'true':
    #... do "option box not checked" stuff

if useDefault.lower() == 'true':
    #... do "option box IS checked" stuff

Strictly speaking the .lower() suffix is not needed if the script will (a) always be run from a toolbox, and (b) be defined as a boolean parameter (checkbox). It's added here for clarity and flexibility.

share|improve this answer
    
+1 Thanks for looking at this in more detail. It's a place in ArcGIS Geoprocessing that seems to me to be crying out for more consistency. – PolyGeo Jul 15 '15 at 23:54
up vote 2 down vote accepted

This can be accomplished via the use of ArcGIS's Script Tool Validation: http://resources.arcgis.com/en/help/main/10.1/index.html#//00150000002m000000

def updateParameters(self):  
    """Modify the values and properties of parameters before internal 
    validation is performed.  This method is called whenever a parameter 
    has been changed."""  
    if self.params[1].value == True:  
        self.params[0].value = arcpy.env.workspace  
    return

GUI Pic GUI Pic #2

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.