-
Tcl/tk
Hi
Hab jetzt mal mit TCL/TK angefangen, das is ja für den Anfang völlig ungewohnt, wenn man nur Objektorientierte Sprachen kennt.
Ich hab jetzt mal n kleines Stück Code geschrieben (JA, ich weiß, es geht kürzer und eleganter, hab aber auch erst angefangen):
Code:
entry .e -textvariable eingabe -width 100 -validate key \
-vcmd {expr {[string length $eingabe]<200}}
pack .e
button .btn1 -text "Ausgeben!" -command {Ausgeben}
pack .btn1
proc Ausgeben {} {wm withdraw .
toplevel .top
wm overrideredirect .top 1
wm geometry .top 600x100+200+350
label .top.lab -text $eingabe
pack .top.lab
bind .top <ButtonPress> {wm deiconify .
destroy .top}
tkwait window .top
exit}
Jetzt kommt folgende Fehlermeldung:
can't read "eingabe": no such variable
can't read "eingabe": no such variable
while executing
"label .top.lab -text $eingabe"
(procedure "Ausgeben" line 5)
invoked from within
"Ausgeben"
invoked from within
".btn1 invoke"
("uplevel" body line 1)
invoked from within
"uplevel #0 [list $w invoke]"
(procedure "tk::ButtonUp" line 24)
invoked from within
"tk::ButtonUp .btn1"
(command bound to event)
Ich finde aber keinen Fehler, es ging noch, befor ich die Prozedur eingefügt hab um das ganze Zeugs wenigstens n Bisschen übersichtlicher zu machen.
-
Hier bist du wohl falsch
Wir haben auch ein Programmierer Forum ;)
ich verschiebs mal
-
Code:
toplevel .mesg-eing
wm title .mesg-eing "Eingabe"
font create nachricht -family Arial -size 20 -weight bold
set mesganzahl "0"
set mesgausgabe " Zähler: $mesganzahl Ziffern!"
wm withdraw .
wm overrideredirect .
#-----------------------------------------------------------
label .mesg-eing.lab0 -text "Bitte Text eingeben! Nicht länger als 50 Zeichen! \
Der Rest wird automatisch gelöscht."
pack .mesg-eing.lab0
entry .mesg-eing.ent0 -textvariable mesgeingabe -width 125
pack .mesg-eing.ent0
focus -force .mesg-eing.ent0
label .mesg-eing.lab1 -textvar mesgausgabe
pack .mesg-eing.lab1
button .mesg-eing.btn0 -text "Ausgeben!" -command mesg-ausgeben
pack .mesg-eing.btn0
#-----------------------------------------------------------
proc mesg-überprüfen {} {
global mesganzahl mesgausgabe
.mesg-eing.ent0 delete 50 end
set mesganzahl [.mesg-eing.ent0 index end]
set mesgausgabe " Zähler: $mesganzahl Ziffern!"
.mesg-eing.ent0 delete 50 end
set mesganzahl [.mesg-eing.ent0 index end]
set mesgausgabe " Zähler: $mesganzahl Ziffern!"
}
proc mesg-ausgeben {} {
global mesgeingabe
wm withdraw .mesg-eing
toplevel .mesg-ausg
wm overrideredirect .mesg-ausg 1
wm geometry .mesg-ausg 820x120+100+325
label .mesg-ausg.lab0 -text "Nachricht empfangen:"
pack .mesg-ausg.lab0
label .mesg-ausg.lab1 -text ""
pack .mesg-ausg.lab1
label .mesg-ausg.lab2 -text $mesgeingabe -font nachricht
pack .mesg-ausg.lab2
label .mesg-ausg.lab3 -text ""
pack .mesg-ausg.lab3
label .mesg-ausg.lab4 -text "----- Zum Schließen bitte klicken oder Taste drücken! -----"
pack .mesg-ausg.lab4
bind .mesg-ausg <ButtonPress> {wm deiconify .
destroy .mesg-ausg}
bind .mesg-ausg <KeyPress> {wm deiconify .
destroy .mesg-ausg}
focus -force .mesg-ausg
tkwait window .mesg-ausg
{exit}
}
#-----------------------------------------------------------
bind .mesg-eing.ent0 <Key-Return> mesg-ausgeben
bind .mesg-eing.ent0 <KeyPress> mesg-überprüfen
Edit: Hier der Code, hab nur am Anfang der Prozedur noch "global eingabe" eingefügt, funzt jetzt. Jetzt das nächste Problem, der Zähler laagt, wie besser machen??
-
Habs gelöst:
letzte Zeile:
Code:
bind .mesg-eing <KeyPress> mesg-überprüfen