Einheiten

Kleiner Einheiten-Umrechner für nicht-metrische Maßangaben.

Links eingetragene Werte rechnen in die rechte Spalte um und umgekehrt.


#!/usr/bin/wish

package require Tk

set tcl_precision 3

bind Entry <<Paste>> {catch {
    	catch {
      		%W delete sel.first sel.last
      	    }
    	%W insert insert [::tk::GetSelection %W CLIPBOARD]
    	tk::EntrySeeInsert %W
  }
}

destroy {*}[winfo children .]

namespace import tcl::mathfunc::*

wm title . Einheiten

wm resizable . no no

destroy .cutCopyPaste
menu .cutCopyPaste -tearoff no
.cutCopyPaste add command -label Cut -command {event generate [focus] <<Cut>>}
.cutCopyPaste add command -label Copy -command {event generate [focus] <<Copy>>}
.cutCopyPaste add command -label Paste -command {event generate [focus] <<Paste>>}
bind Entry <3> {tk_popup .cutCopyPaste %X %Y}

set lambda {
  {a c sum fac} {
    set aVal [double [expr [string map {, .} [$a get]]]]
    $a delete 0 end
    $a insert end [string map {. ,} $aVal]
    set val [expr "($aVal - $sum) * $fac"]
    $c delete 0 end
    $c insert end [string map {. ,} $val]
  }
}


set i 0
foreach {
  e0   e1      sum        fac
} {
  Knoten m/s      0         0.514
  Knoten km/h     0         1.85
  kW     PS       0         1.35962
  Unze   Gramm    0        31.1034768
  inch   cm       0         2.54
  m/s    km/h     0         3.6
  foot   m        0          .305
  fathom m        0          .305*2
  yard   m        0          .305*3
  mile   km       0         1.60934
  kp     Newton   0         9.807
  lb     kg       0         0.454
  Grain  Gramm    0         1.0/15.4324
  °K     °C     273.15      1.0
  °F     °C      32.0       5.0/9.0
  °R     °C       0         1.0/.8
} {
  set line [incr i]
  grid\
    [entry .a$line -width 10 -justify right]\
    [label .b$line -text "$e0 " -justify left]\
    [label .eq$line -text "= "]\
    [entry .c$line -width 10 -justify right]\
    [label .d$line -text "$e1" -justify left]\
    -sticky w
  set sum [expr $sum]
  set fac [expr $fac]

  bind .a$line <Return> [list apply $lambda .a$line .c$line $sum $fac]
  .a$line insert end 0
  apply $lambda .a$line .c$line $sum $fac
  bind .c$line <Return> [list apply {
      {a c sum fac} {
        set cVal [double [expr [string map {, .} [$c get]]]]
        $c delete 0 end
        $c insert end [string map {. ,} $cVal]
        set val [expr "$cVal / $fac + $sum"]
        $a delete 0 end
        $a insert end [string map {. ,} $val]
      }
    } .a$line .c$line $sum $fac]
  bind .a$line <FocusIn> {%W selection range 0 end}
  bind .c$line <FocusIn> {%W selection range 0 end}
}

grid\
  [entry .m -width 10 -justify right]\
  [label .mLabel -justify left -text gram]\
  [label .byV -justify right -text by]\
  [entry .v -width 10 -justify right]\
  [label .j -justify left -text {m/sec = 2,0 J}]\
  -sticky w

menu .j.copy -tearoff no
.j.copy add command -label Copy -command {
  clipboard clear
  # clipboard append [string range [.j cget -text] 8 end-2]
  clipboard append [lindex [.j cget -text] end-1]
}

bind .j <3> {tk_popup .j.copy %X %Y}

menu .m.caliber
.m.caliber add command -label Cut -command {event generate [focus] <<Cut>>}
.m.caliber add command -label Copy -command {event generate [focus] <<Copy>>}
.m.caliber add command -label Paste -command {event generate [focus] <<Paste>>}
.m.caliber add separator
.m.caliber add command -label 5,5mm -command {
  .m delete 0 end
  .m insert end 1,0
  focus .m
}
.m.caliber add command -label 4,5mm -command {
  .m delete 0 end
  .m insert end 0,5
  focus .m
}

bind .m <3> {
  focus %W
  tk_popup .m.caliber %X %Y
  break
}

bind .m <FocusIn> {%W selection range 0 end}
bind .v <FocusIn> {%W selection range 0 end}

.m insert end 0,5
.v insert end 110,0

bind .m <Return> {
  apply {
    {} {
      set m [expr double([string map {, .} [.m get]])]
      .m delete 0 end
      .m insert end [string map {. ,} $m]
      set v [expr double([string map {, .} [.v get]])]
      .v delete 0 end
      .v insert end [string map {. ,} $v]
      set J [expr {$m/2*$v*$v/1000}]
      .j configure -text "m/sec = [string map {. ,} $J] J"
    }
  }
}

# =(B1)/2*B2*B2/1000

bind .v <Return> [bind .m <Return>]

12.10.2022