Das In-Skript vorbereiten

Nachdem wir nun in der Lage sind eine UI zu erzeugen und diese zu triggern, sollten wir uns darum kümmern diese mit Leben zu füllen.

Das passiert zum einen dadurch, dass wir Maske weiter zeichnen und zum anderen dadurch, dass wir ein In-Skript erstellen, mit dem wir Einstellungen in die Maske schreiben können.

Zuerst erstellen wir im UI Ordner eine Python Skript Datei. Für dieses Demo nenn ich mein In-Skript, Demo_In.py

Diesen Namen muss ich dann in der ui.xml mit angeben, damit der Trigger weiß. welches In-Skript verwendet werden soll, sobald die UI geöffnet wird.

<XML>
<config tag=“900.001.010.510.100″ ui=“demo“ in=“Demo_In“ out=““/>
</XML>
In dem Skript Demo_In.py brauchen wir ein paar Zeilen als Vorlage, damit das Skript überhaupt arbeiten kann. Prinzipiell können wir mit einem vollständig leerem Skript anfangen. Um zu zeigen, wie die „allgemeine“ Vorlage für ein normales In-Skript aussieht, werden wir dieses hier auch einmal zusammen aufbauen.
Also, starten wir mit einem einfachen „Hello World“ – Skript.
# -*- coding: utf-8 -*-
import kkp
kkp.MsgBox(„Hello UI“ , 0)
Wenn wir nun auf das mittlere Segment klicken, bekommen wir eine Message-Box und danach geht unser noch leeres Fenster auf.
In der Regel müssen wir wissen wer angeklickt wurde, damit wir bei Bedarf Informationen über das angeklickte Objekt aus der Konstruktion auslesen können, um diese dann in die Maske zu schreiben.
Dazu schreibt uns das KKP die Objektnummer des angeklickten Objektes in eine spezielle Variable.
# -*- coding: utf-8 -*-
import kkp
XML_PARAM = „“““““
kkp.MsgBox(XML_PARAM , 0)
Wir wir dann auf das mittlere Segment klicken, bekommen wir die Objektnummer angezeigt. ACHTUNG! Im In-Skript darf man keine print() Anweisungen verwenden! Die Print-Anweisung ist hier reserviert um die Informationen aus dem Skript ins KKP zu bringen, damit die Maske eingestellt werden kann.
Da die Konfiguration der Maske recht aufwändig und kompliziert ist, haben wir ein Python-Modul vorbereitet, damit die Arbeit leichter wird. Das wollen wir als nächstes mit in unser Skript einbauen.
# -*- coding: utf-8 -*-
import kkp
import SegmentConfig as SC
XML_PARAM = „“““““
try: iObjNr = int(XML_PARAM)
except: iObjNr = 0
sc = SC.SegmentConfig(iObjNr)
Damit wir eine die Maske einstellen können, müssen wir eine XML Datei per print Befehl ausgeben. Der Inhalt dieser XML Datei kann sehr groß und unübersichtlich sein. Daher bietet das Modul SegmentConfig uns eine Funktion an, die uns genau diese XML Datei erstellt.
# -*- coding: utf-8 -*-
import kkp
import SegmentConfig as SC
XML_PARAM = „“““““
try: iObjNr = int(XML_PARAM)
except: iObjNr = 0
sc = SC.SegmentConfig(iObjNr)
sXml = sc.toXml()
print(sXml)
Ich persönlich mag es immer sehr gerne wenn Skripte in verschiedene Funktionen unterteilt werden. Ich zumindest empfinde das dann als leserlicher, gerade wenn die Skripte größer werden. Daher unterteile ich mir das Skript auch jetzt schon. Ich möchte mir eine Funktion bauen, mit der diese XML Datei, die ich dem KKP geben soll, vorbereitet wird.  Und dann baue ich mir noch einen Aufruf, der immer dann ausgeführt wird, wenn das Skript gestartet wird.
# -*- coding: utf-8 -*-
import kkp
import SegmentConfig as SC
XML_PARAM = „“““““
def createXML():
try: iObjNr = int(XML_PARAM)
except: iObjNr = 0
sc = SC.SegmentConfig(iObjNr)
sXml = sc.toXml()
return sXml
if __name__ == ‚__main__‘:
    sXml = createXML()
    print(sXml)
Damit haben wir unser rudimentäres Template fertig. Was ich noch meistens mache, ist dass ich den UI Ordner mit zum Suchpfad von der KKP-API hinzufüge. Dadurch kann ich in meinen UI Skripten (In- und Out- Skripten) auch auf andere Skripte (Module) aus dem UI Verzeichnis zugreifen. So kann ich mir dann auch ein Modul erstellen, in dem ich Funktionen unterbringe, die ich in mehreren Skripten benötige. Das spart jede Menge Aufwand beim Programmieren.
# -*- coding: utf-8 -*-
import kkp
import SegmentConfig as SC
#
# UI Verzeichnis zu Suchpfad hinzufügen
import sys
sys.path.append(kkp.Get_Systemgeberdir() + „/ui“)
import ui
# Ende
#
XML_PARAM = „“““““
#
# Erstellt die Konfigurations.-XML. Um dies zu vereinfachen wird das Modul SystemConfig verwendet.
def createXML():
    try: iObjNr = int(XML_PARAM)
    except: iObjNr = 0
    sc = SC.SegmentConfig(iObjNr)
    sXml = sc.toXml()
    return sXml
#
# Aufruf wenn Skript gestartet wird. Gibt die XML Konfiguration ans KKP.
if __name__ == ‚__main__‘:
    sXml = createXML()
    print(sXml)
Und jetzt, da wir unsere Vorlage fertig haben, können wir unseren ersten Befehl verwenden, um die Maske ein wenig anzupassen. Wir verändern den Titel des Fensters.
# -*- coding: utf-8 -*-
import kkp
import SegmentConfig as SC
import sys
sys.path.append(kkp.Get_Systemgeberdir() + „/ui“)

 

XML_PARAM = „“““““

 

def createXML():
    try: iObjNr = int(XML_PARAM)
    except: iObjNr = 0

 

    sc = SC.SegmentConfig(iObjNr)

 

    sc.setWindowTitle(„Hello UI!“)
    sXml = sc.toXml()
    return sXml

 

if __name__ == ‚__main__‘:
    sXml = createXML()
    print(sXml)
Wenn wir das Skript nun ausführen, erhalten wir folgendes Fenster