Eine mit PythonCard erzeugte GUI
Beispiel: Anhalteweg eines Autos
Die folgende grafische Benutzeroberfläche soll mit Hilfe des Werkzeugs PythonCard erstellt werden:
PythonCard stellt einen Layout-Editor zur Verfügung, mit dessen Hilfe man die Komponenten auf einem Hintergrund plazieren kann.
Mit Hilfe eines Ressourcen-Editors bzw. Objektinspektors kann man die gewünschten Attributwerte der benutzten GUI-Objekte einstellen.
PythonCard erzeugt beim Speichern der Daten zwei Dateien. In der einen sind sämtliche Informationen zu den GUI-Objekten in codierter Form abgelegt.
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgAnhalteweg',
'title':u'Anhalteweg eines Autos',
'size':(256, 286),
'backgroundColor':(255, 255, 255),
'components': [
{'type':'TextField',
'name':'tfWertAnhalteweg',
'position':(180, 196),
'size':(50, -1),
},
...
] # end components
} # end background
] # end backgrounds
} }
Aus diesen Informationen werden die entsprechenden GUI-Objekte automatisch erzeugt.
Die zweite Datei enthält ein von PythonCard erstelltes Python-Programm (basierend auf
einer Deklaration der Klasse MyBackground).
...
from PythonCard import model
class MyBackground(model.Background):
def on_initialize(self, event):
# if you have any initialization
# including sizer setup, do it here
pass
if __name__ == '__main__':
app = model.Application(MyBackground)
app.MainLoop()
Die gewünschte Ereignisverarbeitung muss man als Benutzer selbst ergänzen, z. B. so:
...
from PythonCard import model
class MyBackground(model.Background):
def on_initialize(self, event):
# if you have any initialization
# including sizer setup, do it here
pass
def on_bBerechnen_mouseClick(self, event):
# Uebernahme der Daten
geschwindigkeit = float(self.components.tfGeschwindigkeit.text)
# Verarbeitung der Daten
reaktionsweg = (geschwindigkeit/10)*3
bremsweg = (geschwindigkeit/10) * (geschwindigkeit/10)
anhalteweg = reaktionsweg + bremsweg
# Anzeige der Daten
anzeigeReaktionsweg = '%.2f'%(reaktionsweg)
self.components.tfWertReaktionsweg.text = anzeigeReaktionsweg
anzeigeBremsweg = '%.2f'%(bremsweg)
self.components.tfWertBremsweg.text = anzeigeBremsweg
anzeigeAnhalteweg = '%.2f'%(anhalteweg)
self.components.tfWertAnhalteweg.text = anzeigeAnhalteweg
if __name__ == '__main__':
app = model.Application(MyBackground)
app.MainLoop()
Es ist schwierig, dieses Programm vollständig zu durchschauen. Hierzu müsste man sich zunächst
mit den Details der sehr umfangreichen Klasse Background im
Modul model auseinandersetzen. Wir verzichten daher hierauf.
Um trotzdem eine erste Idee zu erhalten, wie die Benutzeroberfläche hier verwaltet wird, schau dir die folgenden Abschnitte an. Beachte, dass dort die im Hintergrund von PythonCard ablaufenden Vorgänge nicht genau abgebildet werden.