Kurz: Tcl hat eine eingebaute Ereignisschleife. after plant Aktionen, vwait wartet:
Teil des Kurses Tcl
Zeit und Datum
set t 0
puts [clock format $t -format "%Y-%m-%d %H:%M:%S" -gmt 1]
puts [clock scan "2024-03-15" -format "%Y-%m-%d" -gmt 1]
set sek [clock add 86400 1 day -gmt 1]
puts [clock format $sek -format "%d.%m.%Y" -gmt 1]
puts [expr {[clock seconds] > 1700000000}]
puts [clock format 1700000000 -format "%A, %d. %B %Y" -gmt 1 -locale en]
puts [string is wideinteger [clock milliseconds]]
puts [format "%.1f Tage" [expr {(1700000000 - 1600000000) / 86400.0}]]Ausgabe:
1970-01-01 00:00:00
1710460800
03.01.1970
1
Tuesday, 14. November 2023
1
1157.4 TageEreignisschleife und after
Tcl hat eine eingebaute Ereignisschleife. after plant Aktionen, vwait wartet:
set zaehler 0
proc tick {} {
global zaehler
incr zaehler
puts "tick $zaehler"
if {$zaehler < 3} {
after 10 tick
} else {
set ::fertig 1
}
}
after 10 tick
vwait ::fertig
puts "fertig nach $zaehler Ticks"
after 20 {puts "Verzögerte Aktion"; set ::ende 1}
puts "vor dem Warten"
vwait ::endeAusgabe:
tick 1
tick 2
tick 3
fertig nach 3 Ticks
vor dem Warten
Verzögerte AktionProzesse und Umgebung
puts [exec echo hallo]
puts [string trim [exec sh -c "echo a; echo b"]]
set status [catch {exec sh -c "exit 3"} meldung opts]
puts "$status [lindex [dict get $opts -errorcode] end]"
puts [info exists ::env(PATH)]
set ::env(MEINE_VAR) "wert"
puts [exec sh -c {echo $MEINE_VAR}]
puts [llength $::argv]
puts $::tcl_platform(os)
puts [info tclversion]
puts [expr {[string length [info hostname]] > 0}]Ausgabe:
hallo
a
b
1 3
1
wert
0
Linux
8.6
1Tk und Pakete
Tk ist das GUI-Toolkit von Tcl. Das Skript braucht eine grafische Umgebung (wish):
package require Tk
label .gruss -text "Hallo, Tk!"
button .knopf -text "Klick mich" -command { .gruss configure -text "Geklickt!" }
pack .gruss .knopf -padx 20 -pady 10Tcl hat viele Pakete (package require) und die Bibliothek Tcllib:
package require json
package require md5
puts [dict get [json::json2dict {{"name": "Mia", "alter": 17}}] name]
puts [string tolower [md5::md5 -hex "a"]]Ausgabe:
Mia
0cc175b9c0f1b6a831c399e269772661| Paket | Zweck |
|---|---|
| Tk | Grafische Oberflächen |
| Tcllib | Sammlung nützlicher Pakete (json, csv, md5, …) |
| Expect | Interaktive Programme automatisieren |
| TclTest | Tests |
SQLite (package require sqlite3) | Datenbank |
| Thread | Threads |
Hinweis
Das letzte Beispiel setzt Tcllib voraus; die Bibliothek ist bei vielen Installationen dabei (
apt install tcllib).
Merke
clockformatiert und rechnet mit Zeitafterplant Aktionen,vwaitwartet auf Ereignisse in der Ereignisschleifeexecstartet Programme,envundargvliefern die Umgebung- Tk baut Oberflächen, Tcllib liefert viele Zusatzpakete
Übungsaufgabe
Starte mit exec einen Befehl und gib seine Ausgabe großgeschrieben aus.
Quiz zur Selbstkontrolle
Wofür steht Tk?
- Toolkit für grafische Oberflächen (richtig)
- Ein Test-Kit
- Ein Textkompressor
- Eine Typprüfung
Was macht vwait?
- Wartet in der Ereignisschleife auf eine Variablenänderung (richtig)
- Wartet auf Eingabe
- Beendet das Programm
- Löscht Variablen
Welche Bibliothek ergänzt Tcl um viele Pakete?
- Tcllib (richtig)
- Boost
- Numpy
- Guava
Weiter im Kurs
Zurück: Dateien, Namespaces und Objekte
Weiter: Praxisprojekte
Alle Kapitel: Tcl im Überblick