Ergebnis 1 bis 4 von 4

Thema: Tcl/tk

  1. #1

    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.

    Geändert von Ineluki (02.07.2006 um 00:29 Uhr)

  2. #2
    Hier bist du wohl falsch
    Wir haben auch ein Programmierer Forum
    ich verschiebs mal

  3. #3
    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??

    Geändert von Freak (05.07.2006 um 18:22 Uhr)

  4. #4
    Habs gelöst:
    letzte Zeile:
    Code:
    bind .mesg-eing <KeyPress> mesg-überprüfen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •