category | e.g. 'Modeling' | |
name | the button's caption e.g. 'MIL Rates' or 'MIL' | |
settings |
qubtree.Node such as returned by GetSettings() optionally override the settings from the dialog box |
category | e.g. 'Modeling' | |
name | the button's caption e.g. 'MIL Rates' or 'MIL' | |
returns | qubtree.Node |
name | the button's caption | |
func | a function(propertiesDict) to run when the button is clicked. | |
shortName | the button's caption when showing small buttons (5 letters max) | |
dlogOnLClick | whether to show a settings dialog when the button is left-clicked | |
dlogOnRClick | whether to show a settings dialog when the button is right-clicked | |
hint | a tool-tip for the button | |
description | an extended description for the "Edit Buttons" window | |
propertiesCaption | some text for the top of the settings dialog | |
properties | a list of settings, either ChoiceField and TextField (below), or e.g. DialogText from Dialogs. | |
category | which group of buttons to add to, default "Scripts" | |
DataChannel | whether to show "Data Channel" at the top-left of the properties dialog | |
DataList | whether to show the data file list in the properties dialog | |
FileList | if the data list is visible, whether to include "file list" as an option | |
Process | whether to show the "process data" panel in the properties dialog | |
Threads | whether to show the "threads" panel in the properties dialog |
Your function should have one argument: a dictionary mapping setting-name to setting-value. See ChoiceField and TextField for how to specify settings and defaults.
name | the name you'll use to look up the setting's value in your function (not visible to the user) | |
caption | the text displayed in the settings dialog | |
choices | a list of strings for the user to choose from. | |
default | the string which is chosen initially (should be in choices as well) |
name | the name you'll use to look up the setting's value in your function (not visible to the user) | |
caption | the text displayed in the settings dialog | |
default | initial value, as a string | |
acceptor | a function which converts a string from the settings dialog into the desired type, or raises an exception if it is invalid or out of bounds. |
You can use a predefined acceptor function (in Buttons.py) or specify your own. It must take a string as argument, and return whatever kind of value you expect. acceptString is simply the identity function -- no conversion required. If the conversion is impossible, or the value is e.g. out of bounds, the acceptor should raise an exception with an informative message.
# The button's function takes one argument: a dictionary of named settings. # This example merely prints all its settings. def TestReport(settings): for setname in settings.keys(): QUB.Report( setname + ': ' + str(settings[setname]) ) QUB.Report("-------------------------") test = AddTaskButton( 'TestReport', # button text TestReport, # function 'TRpt', # short text for small buttons 0, # show settings dialog on left-click? 1, # show settings dialog on right-click? "Test Buttons.AddTaskButton", # tool-tip "See PythonScripts/Buttons.py", # description for the "Edit Buttons" dialog "Please mess with these settings:", # caption for the settings dialog # the last arg. is a list of settings. # Settings have a name such as "abc" which is used for look-up in the function, # and a caption such as "Pick one:" for display in the settings dialog. # They can be either a ChoiceField (pick one of these strings) (in the example, 'b' is given as the default), # or a TextField -- free response. # The optional 4th argument to the TextField constructor is an "acceptor": # a function which converts a string to whatever type your function expects, # or throws an exception to reject the new setting. # The default acceptor performs no conversions (it stays as a string). [ChoiceField("abc", "Pick one:", ['a', 'b', 'c'], 'b'), TextField("anything", "No limits:", ""), TextField("number", "Any number:", "0", acceptFloat), TextField("int", "Any integer:", "0", acceptInt), TextField("bounded", "Float between 0 and 1:", "0", acceptFloatBetween(0, 1)), TextField("boundedInt", "Int between 0 and 9:", "0", acceptIntBetween(0, 9)), TextField("positive", "Positive int:", "1", acceptIntGreaterThan(0)), TextField("negative", "Negative int:", "-1", acceptIntLessThan(0))] ) # Here's a smaller example that also shows how to put up your own dialogs: def Greet(props): answer = QUB.Dialog(props['greeting'], # dialog caption ['Good', 'OK', 'Bad'], # buttons [Dialogs.DialogText('Comments', 'Comments:')] ) # list of fields QUB.Report( answer['button'] + ': ' + answer['Comments'] ) AddTaskButton( 'Greet', Greet, 'Hi', 0, 1, "Interact with the machine on a more human level", "A simple example of how to add your own buttons via python.\nSee PythonScripts/Greet.py", "Customize the message:", [TextField("greeting", "The greeting:", "Hello. How are you today?", acceptString)] )