List control, property change generates two events

I have the following code in the property change event handler for a single select list:

if event.propertyName == 'selectedIndex':
    print event.source.selectedIndex

Two events are generated as I click on each item in the list box. Here is some sample output:


I think this issue has been highlighted before (“One other thing- working with Colby the other day, we found that the List.selectedIndex property change generates two events instead of one”). For details see:

Is this correct behaviour? If it is, can you suggest a simple workaround so I can get a single event for a single click?

We are using Ignition version 7.2.3 (b6630).

Thank you for your help,

You can work around this issue with a client property.

if event.propertyName == 'selectedIndex':
    if event.newValue != event.source.getClientProperty("LastIndex"):
        print event.source.selectedIndex

Hello Kyle,

Thank you very much for the work around. My property change event is working perfectly now.

I can’t find any details of the methods:


…in the Ignition documentation. Is this working directly with dynamic properties?

Thank you again for your help,


All the components in Ignition are extensions of JComponents.

As such, most methods available to a JComponent will be available to Ignition Components, unless they are over-ridden.

Because the scripts we write are written in Jython, we can access the Java methods and constructors through Jython.

To list all the methods available to a certain component, you can do the following:

methods = event.source.parent.getComponent('Pie Chart').class.getMethods() data = [] for method in methods: data.append([method]) event.source.parent.getComponent('Table').data = system.dataset.toDataSet(["Methods"],data)

You can do the same for constructors, fields, etc.

Thank you again Kyle. I am sure this will be very useful in future.

I am interested to see if we can store an instance of a jython class in the client properties of a control. I will try it out as soon as I get some time.

Yeah, you can do something like that. For example, if I wanted to set a global reference to a Java Color or something else, you can do that like this

from java.awt import Color global testColor testColor = Color(255,255,255,0)

To use this in another script, you can do the following

Global testColor print testColor

Color, itself is a Java Object, so this will work for other things, such as JFrames, Ignition components, etc.