Hi, Im having trouble with my scripting for the visibility of a component.
I am new to ignition and just a beginner on scripting so any advice would be great!
My goal is to make the alarm status table on my docked window to become visible = false, when a certain “Alarms” window is the current main window viewed (or the root container of it is visible).
Currently I have tried the following statement on property change of the component, but I keep getting an error:
#To get other window's visibility property
AlarmWin = system.gui.getWindow("Alarm")
if ({AlarmWin.rootContainer.visible}) == true:
#if statement conditions the visibility of the component
AlarmDock = system.gui.getwindow("Footer")
{AlarmDock.rootContainer.getComponent("Alarm Status Table").visible} = false
The error is when I run vision on this project saying that there is an error running this script, hence the visibility is not affected.
Please and thank you!
What Phil said.
Also, you can’t use {AlarmWin.rootContainer.visible}
, you should have seen squiggly red lines beside that code in the editor to indicate this.
The code below fixes up your syntax errors, although I’m still not sure it’s the best way to go about doing what you’re trying to do. I’m also not sure which property you should be looking at, nor which component this script is running on
if event.propertyName == '<propery name>':
AlarmWin = None
try:
AlarmWin = system.gui.getWindow('Alarm') # this will error if the window isn't found
except:
pass
try:
AlarmDock = system.gui.getwindow('Footer')
AlarmDock.rootContainer.getComponent('Alarm Status Table').visible = (AlarmWin == None)
except:
pass # or do something
1 Like
Hi,
Thank you. I’ve changed the post. Sorry, being new to the forums I’m unaware of the formatting rules and such.
I basically have an ‘alarm status table’ component on a docked window that shows at all times. However, im trying to make that invisible when i have the main window (that has a larger size version of the ‘alarm status table’ component) on as the current window.
Apologies for being unclear. I’m running the script on the component on the docked window, so this will be relying on the main window component.
An easier approach might be simply to look at the tag that holds the window path to the currently opened main window:
[System]Client/User/CurrentWindow
and directly bind that to the visible property
You could use the expression:
{[System]Client/User/CurrentWindow} != 'Alarm'
You should also have a look through that System folder to see what else there is in there that you can use for other things.
Hi Nick,
First of all, thank you for your efforts and advice giving me help on this. really appreciate it…
I’m still trying to get the hang of ignition so i’ll thank you for your patience in advance.
For that … are you proposing i write the script in scripting > gateway events > tag change scripts?
if so, how would i direct to the visible property of my component with it ? Pls & ty
No worries, we were all new once!
And nope, that was an expression, not a script. The expression language is used within component bindings. Python scripting is used on component (and other) event handlers, like the propertyChange event.
You should put that expression within the Alarm Dock window’s Alarm Status Table’s visible
property’s Expression binding. Click on the chain link icon beside the visible property to open the bindings window. I’ll get a screenshot in a sec
1 Like
Aw genius!
Thank you! So many ways to do 1 thing, just takes experience and expertise to know how to do it the right way.
hmm I’ve jsut tried it, “{[System]Client/User/CurrentWindow} != ‘Alarm’” on the expressions of the visibility binding on the docked component. it still seems to show up even with the main window on alarm… would it have to be the path to the page of alarm or just the name of the window?
But no errors which is still a leap forward
It needs to be the full window path. Sorry, I assumed that 'Alarm' was the full path
Oops sorry I had the end property .Name to the the {[System]Client/User/CurrentWindow} and thats why it wasnt working. and now it works perfect. Thank you very much Nick, I owe you!
3 Likes