Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Tcl (GUI) -command option

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[1] Tcl (GUI) -command option

Messaggioda Foto Utenteposta10100 » 14 ott 2010, 10:14

Ciao a tutti,
sto iniziando in questi giorni con il tcl e c'e` una cosa che non riesco a capire.

Se dichiaro un bottone come:
Codice: Seleziona tutto
button .b -text ciao -command ".list insert end [tk_getOpenFile]"

in cui .list e` una listbox, appena lancio lo script appare la finestra per la scelta del file e poi quando premo sul pulsante non succede piu` nulla.
Pero` se dichiaro il bottone come:
Codice: Seleziona tutto
button .b -text ciao -command "addToList .list"

in cui la procedura addToList non e` altro che:
Codice: Seleziona tutto
.list insert end [tk_getOpenFile]

funziona correttamente.

Chi mi sa spiegare perche`?

Grazie!

Luca.
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[2] Re: Tcl (GUI) -command option

Messaggioda Foto Utentexyz » 14 ott 2010, 12:03

posta10100 ha scritto:Chi mi sa spiegare perche`?

La maggior parte delle GUI funzionano con le call back. Il primo caso viene eseguita la funzione "tk_getOpenFile" (quindi appare) e l'inserzione nella lista viene memorizzato come call back, se premi il bottone ti restituisce un chiaro messaggio d'errore che non hai riportato:

Codice: Seleziona tutto
invalid command name ".list"
    while executing
".list insert end "
    invoked from within
".b invoke"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 [list $w invoke]"
    (procedure "tk::ButtonUp" line 22)
    invoked from within
"tk::ButtonUp .b"
    (command bound to event)


Il secondo caso è l'uso corretto della cal back, bisogna passare il nome della funzione da chiamare quando invochi l'evento di premere il bottone.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[3] Re: Tcl (GUI) -command option

Messaggioda Foto Utenteposta10100 » 14 ott 2010, 14:18

In realta` il codice era leggermente diverso da quello postato, nel secondo caso passava attraverso un if che in quelle condizioni comunque era "true" :oops:

A parte questo, non ho capito cosa succede. :oops:

Voglio dire, nel primo caso perche` il dialog viene visualizzato subito?
Il comando non dovrebbe essere eseguito in risposta alla pressione del bottone?
O forse non ho ben capito lo scopo dell'opzione "-command"?

Nel secondo caso, che praticamente fa la stessa cosa (if a parte) perche` il dialog appare solo quando premo il bottone?

Purtroppo ora non posso piu` postare il codice originale dato che ho fatto un po di modifiche.

Grazie ancora!

Luca.
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[4] Re: Tcl (GUI) -command option

Messaggioda Foto Utenteangus » 14 ott 2010, 14:37

ho questo ricordo:
se il contenuto di -command è tra " " viene eseguito quando viene DEFINITO il button (questo spiega perché si apre subito la finestra per la scelta del file) ,
mentre se lo metti tra { }, viene eseguito quando lo PREMI

spero ti sia utile, ora devo scappare e non posso provare il codice
(c'è ancora qualcuno che usa tcl/tk?)
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.485 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4172
Iscritto il: 20 giu 2008, 17:25

0
voti

[5] Re: Tcl (GUI) -command option

Messaggioda Foto Utentexyz » 14 ott 2010, 15:08

Mi ero dimenticato di dire che le istruzioni comprese tra "[...]" vengono valute e il risultato viene sostituto nell'espressione, quindi sppena passi quella sequenza di comandi delimitati dalle doppie virgolette viene eseguito subito "tk_getOpenFile", poi l''evento di premere il bottone implica l'esecuzione del resto del comando il quale segnala errore.

Se togli le parantesi quadre nel primo caso non viene subito eseguito l'apertura della finestra di dialogo ma poi compare il messaggio di errore nel inserimento nella lista.

angus ha scritto:c'è ancora qualcuno che usa tcl/tk?

E' la stessa cosa che mi sono chiesto io, non amo questo linguaggio e mi sono chiesto chi ancora lo usa, al giorno d'oggi esistono dei linguaggi di script con GUI con una sintassi più moderna.
Avatar utente
Foto Utentexyz
6.864 2 4 6
G.Master EY
G.Master EY
 
Messaggi: 1778
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[6] Re: Tcl (GUI) -command option

Messaggioda Foto Utentephylum » 14 ott 2010, 15:33

mmm +/-

un comando tra "" viene eseguito se nativo o metodo di un oggetto
tra [] se è un procedura

es.
button .b1 -text "Push Me" -command [list onClick]
proc onClick {} {
.b1 configure -text "Thanks"
}

=
button .b1 -text "Push Me" -command ".b1 configure -text \"Thanks\""
\int_{}tella
Immagine
Avatar utente
Foto Utentephylum
6.191 5 7 12
G.Master EY
G.Master EY
 
Messaggi: 3217
Iscritto il: 9 ott 2007, 12:40

0
voti

[7] Re: Tcl (GUI) -command option

Messaggioda Foto Utenteangus » 14 ott 2010, 16:50

mi sono spiegato da cani... e quello che avete capito, non è quello che intendevo. #-o
io facevo riferimento a questo http://www.tcl.tk/about/language.html e precisamente nella parte "Quotes and braces" dove parla delle curly braces cioè la parentesi GRAFFE e non QUADRE.
un po' come si vede qui http://tldp.org/HOWTO/Scripting-GUI-TclTk/basics.html
in questo esempio
Codice: Seleziona tutto
button .submit -text "Click Me" -command { puts "\nHello World" }


Se non mi sono perso qualcosa per strada, a posta10100 basta sostituire le "" con le {} per vedere il suo codice funzionare.
Codice: Seleziona tutto
button .b -text ciao -command {.list insert end [tk_getOpenFile]}


saluti

edit: mancando il codice reale originale si va male a capire, ma probabilmente dentro quelle { } ci va anche un
Codice: Seleziona tutto
global list
altrimenti da appunto l'errore che ha giustamente segnalato xyz
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.485 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4172
Iscritto il: 20 giu 2008, 17:25

0
voti

[8] Re: Tcl (GUI) -command option

Messaggioda Foto Utenteposta10100 » 14 ott 2010, 21:58

Che dire, grazie a tutti!
angus ha scritto:Se non mi sono perso qualcosa per strada, a posta10100 basta sostituire le "" con le {} per vedere il suo codice funzionare.

Domani una prova la faccio, oggi ho risolto facendo chiamare una proc dedicata e tutto sembra funzionare.
Oltretutto mi son voluto complicare la vita andando a creare delle proc per creare dei pannelli riutilizzabili.
Giusto per gradire, li ho pure spostati in file diversi! :!:
angus ha scritto:(c'è ancora qualcuno che usa tcl/tk?)

Da me si usa quasi solo quello... non chiedetemi perché, io ho iniziato l'altro giorno a programmare in tcl, di solito sviluppo in java... e anche quello ha le sua lacune!!!

Grazie ancora!
Luca.
http://millefori.altervista.org
Tool gratuito per chi sviluppa su millefori.

Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. (A. Einstein)
Se non c'e` un 555 non e` un buon progetto (IsidoroKZ)

Strumento per formule
Avatar utente
Foto Utenteposta10100
5.550 4 10 13
Master EY
Master EY
 
Messaggi: 4832
Iscritto il: 5 nov 2006, 0:09

0
voti

[9] Re: Tcl (GUI) -command option

Messaggioda Foto Utenteangus » 14 ott 2010, 22:06

posta10100 ha scritto:Oltretutto mi son voluto complicare la vita andando a creare delle proc per creare dei pannelli riutilizzabili.

Stavo quasi per dirtelo oggi, alla fine è la soluzione migliore... tra l'altro trovi tonnellate di codice già pronto!
buon lavoro
ciao
in /dev/null no one can hear you scream
Avatar utente
Foto Utenteangus
8.485 4 6 9
G.Master EY
G.Master EY
 
Messaggi: 4172
Iscritto il: 20 giu 2008, 17:25


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti