Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tcl/tk



Freak
01.07.2006, 22:01
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):


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.

Whiz-zarD
01.07.2006, 23:52
Hier bist du wohl falsch
Wir haben auch ein Programmierer Forum ;)
ich verschiebs mal

Freak
03.07.2006, 18:17
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??

Freak
05.07.2006, 18:16
Habs gelöst:
letzte Zeile:

bind .mesg-eing <KeyPress> mesg-überprüfen