Názor k článku Programovací jazyk TCL od Petr Cernoch - Takze si to skutecne shrnme :-) (nedalo mi...

  • Článek je starý, nové názory již nelze přidávat.
  • 21. 7. 2005 12:18

    Petr Cernoch (neregistrovaný)
    Takze si to skutecne shrnme :-) (nedalo mi to) zdroj je:
    # ----------------------------
    # funkce pro vykresleni hlavniho okna
    proc fncHlavniOkno {} {
    	global PRVNI DRUHY TRETI CTVRTY PATY
    	
    	set PRVNI 1
    	set DRUHY 1
    	set TRETI 1
    	set CTVRTY 0
    	set PATY 0
    
    	# vytvoreni komponent okna	
    	frame .c
    	checkbutton .c.prvni -text "Prvni" -variable PRVNI \
                -onvalue 1 -offvalue 0
    	checkbutton .c.druhy -text "Druhy" -variable DRUHY \
                -onvalue 1 -offvalue 0
    	checkbutton .c.treti -text "Treti" -variable TRETI \
                -onvalue 1 -offvalue 0
    	checkbutton .c.ctvrty -text "Ctvrty" -variable CTVRTY \
                -onvalue 1 -offvalue 0
    	checkbutton .c.paty -text "Paty" -variable PATY \
                -onvalue 1 -offvalue 0
    
    	button .stav -text "Vytiskni stav" -width 15 -command {fncStav}
    
            # usporadani komponent okna
    	grid .c -row 0 -column 0 -sticky "W"
    	grid .c.prvni -row 0 -column 0 -sticky "W"
    	grid .c.druhy -row 1 -column 0 -sticky "W" 
    	grid .c.treti -row 2 -column 0 -sticky "W" 
    	grid .c.ctvrty -row 3 -column 0 -sticky "W" 
    	grid .c.paty -row 4 -column 0 -sticky "W" 		
    	grid .stav -row 1 -column 0 -sticky "W"
    }
    
    
    # zjisteni a vytisteni stavu checkboxu
    proc fncStav {} {
    
    	set ls  [winfo children .c]
    	set out [open "file.log" a]
    
    	foreach ctrl $ls {
    		set outln "[$ctrl cget -text] : "
    		set var [$ctrl cget -variable]
    		global $var
    		if {[expr $$var]} {
                        append outln "vybran"
                    } else {
                        append outln "nevybran"
                    }
    		puts $out $outln
    	}
    
    	close $out
    }
    
    
    fncHlavniOkno
    
    # ----------------------------
    
    Kdyz jej date do souboru a nastavite spustitelne atributy, bude to fungovat. Protoze momentalne nejsem na linuxu ale na win, vyresil jsem vystup do logovaciho souboru (viz. fncStav), po jeji zmene na:
    proc fncStav {} {
    
    	set ls  [winfo children .c]
    
    	foreach ctrl $ls {
    		set outln "[$ctrl cget -text] : "
    		set var [$ctrl cget -variable]
    		global $var
    		if {[expr $$var]} {
                        append outln "vybran"
                    } else {
                        append outln "nevybran"
                    }
    		puts $outln
    	}
    }
    
    
    by to melo psat do shellu - momentalne nemuzu slouzit s otestovanim :-)
    Takze to bylo "add 1".

    Add 2 : lepsi je pouzit nejakou tu globalni promennou nez delat v programu psi kusy, to se pise i v ucenych knihach, znalci potvrdi.

    Add 3 : to je snad vyresene

    Add 4 : momentalne by se neco ve smyslu "getState" hodilo, nicmene jedna se o jinak navrzeny jazyk takze je to potreba brat v uvahu

    Dale je vhodne se podivat na

    http://pcernoch.wz.cz/test/

    jsou tam screenshoty ("level 1" i "level 2") vcetne zdrojaku a je tedy mozne to porovnat s vasim produktem.

    Add 5 : vidite v tom nejaky vyrazny rozdil? Dovolil jsem si pouzit ikonky z vaseho programu, nechtelo se mi schanet neco jineho. Co se pouziteho jazyku tyce - vsechno zalezi na kodovani retezcu v programu. Rekl bych ze toto je nutne rucne osetrit v kazdem toolkitu. Definovat klavesove a jine zkratky neni v Tcl/Tk zadny problem.

    Add 6 : nejak se mi to s tou tezkopadnosti nezda - nadefinuji si komponenty, usporadam je do okinka, (jednoduse) definuji udalosti, spustim skript a uz ficim.

    :-)