Teil 35 : Formular-GUI mit TCL/TK und HTML-Generator Das hier verwendete einfache Shellskript-Modellsystem soll drei Zusammenhänge aufzeigen: 1. 2. 3. Daten werden bei vielen Web- und Office-Anwendungen in einem ersten Schritt geordnet eingelesen, etwa in eine Tabelle oder eine Datenbank, um dann in einem zweiten Schritt wieder in einem anderen Format ausgegeben zu werden. Grafische Benutzeroberfläche werden mittels fertiger Werkzeug-Baukästen zusammengestellt und die Benutzereingaben werden mit sogenannten Ereignissen verknüpft. Die für eine Ausgabe notwendige Auszeichnungssprache (z.B. HTML oder LATEX) wird erst dynamisch (z.B. mittels PHP oder Perl) erzeugt. Die eigentlichen Daten liegen in tabellarischer Form oder in einer Datenbank (z.B. MySQL) vor. Schema: eingabe.tcl Formulareinträge ausgabe.sh geordnete Daten Webseite tabelle.csv tabelle.html Das Programm eingabe.tcl Voraussetzung: Das TCL/TK-Toolkit (z.B. das auch für Windows erhältliche tclx8.4 muss installiert sein, vgl. http://www.tcl.tk/software/tcltk/) #!/bin/sh #\ exec wish "$0" wm title . Eingabe-Formular frame pack label pack .frame1 .frame1 .frame1.einl .frame1.einl -borderwidth 10 -side top -fill x -text "Gib hier Deine Daten ein:" -side top -fill x frame pack label entry label entry label entry grid grid grid grid grid grid .frame2 .frame2 .frame2.vorl .frame2.vore .frame2.nachl .frame2.nache .frame2.maill .frame2.maile .frame2.vorl .frame2.vore .frame2.nachl .frame2.nache .frame2.maill .frame2.maile -borderwidth 10 -side top -fill x -text "Vorname:" -width 40 -textvariable VOR -text "Nachname:" -width 40 -textvariable NACH -text "Gib hier Deine E-Mail-Adresse ein:" -width 40 -textvariable MAIL -in .frame2 -row 0 -column 0 -sticky w -in .frame2 -row 0 -column 1 -sticky e -in .frame2 -row 1 -column 0 -sticky w -in .frame2 -row 1 -column 1 -sticky e -in .frame2 -row 2 -column 0 -sticky w -in .frame2 -row 2 -column 1 -sticky e frame pack button button .frame3 .frame3 .frame3.b1 .frame3.b2 grid grid .frame3.b1 .frame3.b2 -borderwidth 10 -side top -fill x -text "Abbrechen" -command {exit} -text "OK" -command { set f [open "tabelle.csv" {RDWR CREAT APPEND}] ; seek $f 0 end ; puts $f "\"$VOR\",\"$NACH\",\"$MAIL\"" ; close $f ; exit} -in .frame3 -row 0 -column 0 -in .frame3 -row 0 -column 1 Aufgaben: 1. Erweitere das Eingabeformular um eine Zeile für die Telefonnummer. 2. Schreibe ein neues Eingabeformular für einen vollwertigen Zeugniseingabe-Generator. 3. Für Fortgeschrittene: Überlege, wie die eigentlichen Programmbefehle von der grafischen Oberfläche getrennt programmiert werden können. Das Programm ausgabe.sh #!/bin/bash echo -e "<html>\n <head>\n <title>E-Mail-Liste</title>\n </head>\n <body>\n <h1>E-Mail-Liste</h1>\n <table border="1" cellpadding="2" cellspacing="1" width="80%">\n <tr><td>Vorname</td><td>Nachname</td><td>E-Mail-Adresse</td></tr>\n" > tabelle.html ANZAHL=`echo $(wc -l tabelle.csv) | for i in `seq 1 $ANZAHL` ; do echo -e "<tr> <td>`cat tabelle.csv | sed <td>`cat tabelle.csv | sed <td>`cat tabelle.csv | sed </tr>\n" >> tabelle.html done awk '{print $1}'` -n "$i"p | awk -F, '{print $1}' | sed -e 's/"//g'`</td> -n "$i"p | awk -F, '{print $2}' | sed -e 's/"//g'`</td> -n "$i"p | awk -F, '{print $3}' | sed -e 's/"//g'`</td> echo -e "</table>\n </body>\n </html>" >> tabelle.html Aufgaben: 4. Führe das Programm eingabe.tcl vier bis fünfmal mit veschiedenen Beispieldaten durch und teste dabei auch verschiedene, scheinbar unsinnige Sonderzeichen. 5. Öffne die Datei tabelle.csv mit einem Texteditor und dann mit OpenOffice Calc. 6. Führe anschließend das Programm ausgabe.sh aus. 7. Verändere es so, dass der Hintergrund der HTML-Seite im Web Browser blau angezeigt wird. 8. Schreibe ein neues Eingabeformular für einen vollwertigen Zeugnisausgabe-Generator. Optimiere die Druck-Ausgabe für DIN A 4 durch richtiges Hinzufügen in den Header des entstehenden HTMLDokuments: <style type="text/css"> @media print { @page { size: 21cm 29.7cm; } } </style> 9. Begründe, warum in der CSV-Datei die doppelten Hochkommatas "," so wichtig sind. 10. Begründe, warum die Verwendung von Leerzeichen in Dateinamen problematisch sein kann. 11. Installiere und teste kurz die folgenden Entwicklungsumgebungen für verschiedene Programmiersprachen bzw. Grafik-Bibliotheken. Welche davon sind einfach Plattform übergreifend nutzbar? JavaKarol http://www.schule.bayern.de/karol/jkarol.htm Java Kara http://www.swisseduc.ch/informatik/karatojava/ Java Java Hamster http://www.java-hamster-modell.de/ Java BlueJ http://bluej.org/ Java Eclipse http://www.eclipse.org/ Java Boa Constructor http://boa-constructor.sourceforge.net/ Python WxGlade http://wxglade.sourceforge.net/ WxPython Spe http://pythonide.stani.be/ Python Glade http://glade.gnome.org/ GTK+ Gambas http://gambas.sourceforge.net/ Basic, QT, GTK+, 12. Für Fortgeschrittene: Wie müsste man einen Zeugnisgenerator erweitern, dass er - als Argumente notwendigerweise die Eingabe einer Klasse und fakultativ den gewünschten Schülernamen benötigt? - Die Daten jeder Klasse in getrennten Listen bzw. in einer Datenbank ablegt? 13. Für extrem Fortgeschrittene: Installiere lokal einen Apache Webserver mit lauffähigem PHP-Modul und einer MySQL-Anbindung. Schreibe nun jeweils die entsprechenden PHP oder Perl-Skripte.