Skip to content, Skip to search

Changes

Script Parameters

1,884 bytes added, 14:09, 30 April 2015
Expand page with properties section
{{Scripting}}There is a universal <code>@parameter</code> notation available across all scripts for declaring inputs and outputs. This approach is preferred to using ImageJ 1.x <code>GenericDialog</code> because it is totally agnostic to the user interface, allowing such scripts to run in a variety of contexts.
All scripting languages have access to a universal <code>@parameter</code> notation for declaring inputs and outputs. This approach is preferred to using ImageJ 1.x <code>GenericDialog</code> because it is totally agnostic of the user interface, allowing such scripts to run in a variety of contexts. As with [[Writing_ImageJ2_plugins|ImageJ2 plugins]], script parameterization is based on the [[SciJava]] [https://github.com/scijava/scijava-common/blob/scijava-common-2.40.0/src/main/java/org/scijava/plugin/Parameter.java @Parameter annotation] - so experience with plugin writing directly translates to scripting, and vice versa.  == Basic syntax == The rules for <code>@parameter</code> use is are as follows:
<ol>
</ol>
For example, if we look at the [https://github.com/scijava/scripting-jython/blob/scripting-jython-0.2.0/src/main/resources/script_templates/Python/Greeting.py Greeting.py ] [[Script_Templates|template ]] supplied with Fiji:
<source lang="python">
When the script is completed, we expect to have a <code>String</code> variable named <code>greeting</code> which will be displayed as appropriate, based on the variable type.
Note that if we added an extra comment to the top of our script we would break the script, as suchthe parameters would not be harvested or displayed due to violation of the second parameter rule:
<source lang="python">
</source>
We would actually break Keep this in mind when adding documentation to your scripts. == Parameter properties == If you look at the script[https://github.com/scijava/scijava-common/blob/scijava-common-2.40.0/src/main/java/org/scijava/plugin/Parameter.java @Parameter annotation], you will notice it has many properties - for example, <code>name</code> and <code>description</code>. In Java, annotations can accept [https://docs.oracle.com/javase/tutorial/java/annotations/basics.html comma-separated key=value properties]. Script parameters preserve this property syntax, as with the additional requirement that all parameters would not be harvested or displayed due are enclosed in a '''single parenthetical expression'''. For example, instead of just displaying "Name", we can add a custom label and description to violation the name field of our Greeting.py script as follows: <source lang="python"># A simple python script# @String name (label=Please enter your name,description=Name field)# @OUTPUT String greeting # A Jython script with parameters.# It is the second duty of the scripting framework to harvest# the 'name' parameter rulefrom the user, and then display# the 'greeting' output parameter, based on its type. greeting = "Hello, " + name + "!"</source> It is up to the current UI framework how to deal with these properties. By default, the <code>label</code> will change the input field label, while <code>description</code> will change the mouse-over text.
[[Category:Scripting]]
Bureaucrat, emailconfirmed, incoming, administrator, uploaders
735
edits