package require Tk package require msgcat source listing2.tcl source listing3.tcl source metar.tcl source tclweather-1.12/lib/tclweather_scanner.tcl source tclweather-1.12/lib/conversions.tcl namespace eval ::gui { msgcat::mclocale de } # erzeugt die Oberfläche proc ::gui::erzeugeOberfläche { } { variable f # Erzeugung der Widgets set f [frame .frame -padx 5 -pady 5 ] label $f.ort -anchor w \ -textvar ::tw(ort) puts "Font war «[$f.ort configure -font]»" $f.ort configure -font {Palatino 18 bold} puts "Font ist «[$f.ort configure -font]»" label $f.wetter -textvar ::gui::ddata(wetter) label $f.temperaturL -text "Temperatur : " label $f.temperatur -textvar ::gui::ddata(temp,air) label $f.windL -text "Wind : " label $f.wind -textvar ::gui::ddata(wind) label $f.luftdruckL -text "Luftdruck : " label $f.luftdruck label $f.wolken # Platzieren der Widgetsb mit pack pack $f -expand true -fill both # ... und grid grid $f.ort - - -sticky w grid x $f.wetter -sticky w set row 2 grid $f.temperaturL -row $row -column 0 -sticky e grid $f.temperatur -row $row -column 1 -sticky w grid $f.luftdruckL -row $row -column 2 -sticky e grid $f.luftdruck -row $row -column 3 -sticky w incr row grid $f.windL -row $row -column 0 -sticky e grid $f.wind -row $row -column 1 -sticky w grid x $f.wolken -sticky w grid columnconfigure $f 0 -weight 1 grid columnconfigure $f 1 -weight 1 grid columnconfigure $f 1 -weight 1 grid rowconfigure $f 0 -weight 1 } # erzeugt die Menus proc ::gui::erzeugeMenus { } { #Menubar menu .menubar . configure -menu .menubar # Dateimenu set m [menu .menubar.datei] .menubar add cascade -label "Datei" -menu $m $m add command -label Einstellungen -command ::gui::einstellungen $m add separator $m add command -label Beenden -command ::gui::beenden \ -accelerator ^q bind . ::gui::beenden # Ortmenu set m [menu .menubar.ort] .menubar add cascade -label "Ort" -menu $m set zeile 0 foreach {ort lc } $::orte { incr zeile set colbreak false if {$zeile >= 15} { set colbreak true set zeile 0 } $m add command -label $ort -command [list ::gui::setzeOrt $lc $ort] \ -columnbreak $colbreak } # Hilfemenu set m [menu .menubar.help] .menubar add cascade -label "Hilfe" -menu $m $m add command -label Info -command ::gui::zeigeInfo } # initialisiert die komplette Oberfläche proc ::gui::init {} { # Hauptfenster wm title . Wetter wm geometry . 400x130 erzeugeOberfläche erzeugeMenus } # # Kommandos # proc ::gui::beenden {} { exit 0; } proc ::gui::zeigeInfo {} { tk_messageBox -icon info -type ok \ -message "TkWetter,\neine GUI zur Anzeige von Wetterdaten" \ -title "TKWetter" } proc ::gui::setzeOrt { location_code ort} { set ::tw(location_code) $location_code set ::tw(ort) $ort metar::update_data } # # Hilfsfunktionen # proc ::gui::formatData {liste } { variable ddata variable f array set data $liste parray data set ddate(wetter) "" foreach key {[array names ddata]} { set ddata($key) "" } if { [ info exists data(cond) ] } { set ddata(wetter) [join $data(cond) ", "] } if {[info exists data(wind,speed)]} { set ddata(wind) "[format "%.1f kn" $data(wind,speed)], [format %.1i° $data(wind,dir)]" } if {[info exists data(temp,air)]} { set ddata(temp,air) [ format %g°C $data(temp,air)] } $f.luftdruck configure -text [format "%.f mbar" [expr $data(pres) / 0.752790648] ] if {[info exists data(cloud,type)]} { $f.wolken configure -text $data(cloud,type) } else { $f.wolken configure -text "" } } gui::init metar::update_data # set fd [ open latest_data.tcl] # set liste [read $fd] # close $fd # gui::formatData $liste