[Risolto]Problema con Zenity

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

[Risolto]Problema con Zenity

Messaggio da NicoCale »

Ciao a tutti ragazzi, mi è stato affidato il compito di creare uno script che ha come fulcro del suo funzionamento zenity in quanto compatibile con ogni versione linux,
almeno cosi mi è stato detto.
Vi pongo ora una serie di quesiti ai quali non ho trovato risposta:

-Utilizzando zenity --list --checklist...ecc. , che da vita ad una lista composta da punti che possono essere selezionati, e si preme sul pulsante "annulla" , si ha lo stesso risultato se non si fanno selezioni e si preme su "ok",
c'è un modo per distinguere i due casi ?
potrebbe sembrare una domanda sciocca... ma mi serve saperelo, perchè in caso si prema "annulla" senza fare selezioni, si esce dal programma, mentre premendo ok senza aver selezionato nulla, si dovrebbe presentare una finestra di
errore che avvertirebbe l'utente della mancate selezione di opzioni e gli si dovrebbe ripresentare la checklist.
Sarebbe gia tutto pronto , mi manca solo quel pezzo centrale per distingure l' "annulla" e l' "ok" senza selezioni

-Lo stesso problema riportato sopra si ha con zenity --entry ....ecc. , che da vita ad una finestra nella quale l' utente puo inserire il testo.C'è un modo per distinguere i due casi?

-Con zenity --question...ecc. , che da vita ad una finestra nella quale viene posta all'utente una domanda alla quale può rispondere premendo solamente due tasti .
sia che prema il tasto "si" o che prema il tasto "no", esce lo stesso risultato , una stringa vuota, come mai?

Se può servire e su richiesta charicherò il codice da me steso fin'ora.
Vi prego aiutatemi :( :(
Grazie in anticipo.
Ultima modifica di NicoCale il lunedì 23 giugno 2014, 14:35, modificato 1 volta in totale.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Se può servire e su richiesta charicherò il codice da me steso fin'ora
Su questo forum è la prassi normale affinché le discussioni vengano prese in considerazione, in quanto non è nel "nostro" spirito fare i compiti per gli utenti.

Quindi sì, postalo.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Mi sento un po "ofesso" da questo dubitare... cmq eccolo..
in breve , questo script deve salvare i file contenuti in una cartella , della quale viene indicato l'indirizzo dall'utente, in una o entrambe le cartelle che figurano nella checklist, come funzionalità è ok sono i controlli e le uscite "fatte bene"(utilizzando annulla) nella cheklist che non funzionano , come lunghezza codice, suggerimenti sono ben accetti ma
non indispensabili.
vi posto i due codici, la prima versione , poi la seconda , che sarebbe quella implementata... preciso che lo script deve funzionare in un dominio.

1°versione

Codice: Seleziona tutto

#! /bin/bash 


#Mette nella variabille "sorgente" la path della cartella nella quale si trovano i file da copiare.
sorgente=$(zenity --entry --title="Sorgente file" --text="Inserire Sorgente(indirizzo)
Selezionare la cartella contenente i file che vogliono essere salvati!" --width=600 --height=250 --entry-text="/home/LDAPUsers/$USER/Documenti/") 

#Permette di terminare il programma premendo sul tasto "annulla"
if [ "$sorgente" != "" ]
	then
		(
		#Controllo: esistenza cartella sorgente e manda a video un errore in caso essa non esista.
		if [ ! -e $sorgente ]
			then
			    zenity --error --text="La cartella sorgente inserita non è raggiungibile o insesistente\n\n RICONTROLLARE INDIRIZZO\!"

  			else
				(

        			#Mette nella variabile "fol" la selezione effettuata dall'utente tramite la checklist.  
        		        fol=$(zenity --list --checklist --title "Cartella di destinazione" --text "selezionare la cartella di destinazione\!" --column "Selezione" --column 					"CartellePersonali" False "Tecnologie" False "SistemiEReti" --width=600 --height=250)
  

     				#Controllo: Se la variabile "fol" è vuota mostra un errore che obbliga l'utente a ripetere il processo e selezionare la cartella destinataria.
     				if [ "$fol" = "" ]
    					then
	       				    zenity --error --text="Scegliere almeno una cartella di destinazione\!"

					else

						(
        					#Questa serie di if, indirizza i file della cartella sorgente, verso la\e cartella\e destinataria\e
						if [ "$fol" = "Tecnologie" ]

	    						then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/Tecnologie"

							fi

						if [ "$fol" = "SistemiEReti" ]

    							then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/SistemiEReti"
								
						fi

						if [ "$fol" = "Tecnologie|SistemiEReti" ]

	    						then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/Tecnologie"
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/SistemiEReti"
	
						fi
						) | ( 
							#Barra di avanzamento e messaggio di operazione compiuta
	     						zenity --progress --text="Progresso salvataggio" --auto-close
	     						zenity --info --text="Operazione terminata"
	     			    		    )
				fi
				)
		fi
		)
fi  



2°versione che sarebbe quella che vorrei far "funzionare"

Codice: Seleziona tutto

#! /bin/bash 


#Mette nella variabille "sorgente" la path della cartella nella quale si trovano i file da copiare.
sorgente=$(zenity --entry --title="Sorgente file" --text="Inserire Sorgente(indirizzo)
Selezionare la cartella contenente i file che vogliono essere salvati!" --width=600 --height=250 --entry-text="/home/LDAPUsers/$USER/Documenti/") 


#Permette di terminare il programma premendo sul tasto "annulla"
while [ "$sorgente" != "" ] && [ ! -e $sorgente ]
	  do
                #Controllo: esistenza cartella sorgente e manda a video un errore in caso essa non esista.
		if [ ! -e $sorgente ]
			then
			    zenity --error --text="La cartella sorgente inserita non è raggiungibile o insesistente\n\n RICONTROLLARE INDIRIZZO\!"
                fi
                #Mette nella variabille "sorgente" la path della cartella nella quale si trovano i file da copiare, indirizzo inserito da utente che risulta errato.
		sorgente=$(zenity --entry --title="Sorgente file" --text="Inserire Sorgente(indirizzo)
                Selezionare la cartella contenente i file che vogliono essere salvati!" --width=600 --height=250 --entry-text="$sorgente") 
		
done

if [ "$sorgente" != "" ]
              then
				(

                                while [ "$fol" = "" ]
                                	do   
					#Mette nella variabile "fol" la selezione effettuata dall'utente tramite la checklist.  
        		       		fol=$(zenity --list --checklist --title "Cartella di destinazione" --text "selezionare la cartella di destinazione\!" --column "Selezione" --column 						"CartellePersonali" False "Tecnologie" False "SistemiEReti" --width=600 --height=250)

     					#Controllo: Se la variabile "fol" è vuota mostra un errore che obbliga l'utente a ripetere il processo e selezionare la cartella destinataria.
     					if [ "$fol" = "" ]
    						then
	       					    ver=$(zenity --question --title="Annullare?" --text="<b>ANNULLARE OPERAZIONE?</b>\n-non è stata scelta nessuna cartella di destinazione\n-è stato premuto il tasto 'annulla'" --cancel-label="No" --ok-label="Si")
                                        echo "$ver"
					fi
					done
					

						(
        					#Questa serie di if, indirizza i file della cartella sorgente, verso la\e cartella\e destinataria\e
						if [ "$fol" = "Tecnologie" ]

	    						then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/Tecnologie"

							fi

						if [ "$fol" = "SistemiEReti" ]

    							then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/SistemiEReti"
								
						fi

						if [ "$fol" = "Tecnologie|SistemiEReti" ]

	    						then
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/Tecnologie"
							    rsync -av $sorgente "/home/LDAPUsers/$USER/CartelleDominio/CartellePersonali/SistemiEReti"
	
						fi
						) | ( 
							#Barra di avanzamento e messaggio di operazione compiuta
	     						zenity --progress --text="Progresso salvataggio" --auto-close
	     						zenity --info --text="Operazione terminata"
	     			    		    )
					
								
)		
fi
Per dubbi di qualsiasi tipo sul codice chiedete pure :)
Ultima modifica di NicoCale il domenica 22 giugno 2014, 3:02, modificato 3 volte in totale.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Mi sento un po "ofesso" da questo dubitare... cmq eccolo..
Se ti fai un giro nelle discussioni, puoi constatare facilmente che non è nulla di personale (anche perché sarebbe assurdo avere qualcosa di personale con un utente di un forum), né tanto meno di offensivo, ma che è abitudine.

Questo giusto per chiarire questo punto.
Vista l'ora, ci si aggiorna a domani per la parte tecnica :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Sono d'accordo ahahah,
allora a domani :)
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Non vorrei mettere fretta , però questo problema dovrei risolverlo entro domani,
e mi sto preoccupando , viste le visualizzazioni e la mancanza di proposte.

Susate per la fretta.
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Oppure, si può rimuovere fisicamente il tasto annulla dalla finestra checklist????

:( :( :(
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema con Zenity

Messaggio da UbuNuovo »

Ciao, ora non ti posso seguire, ti faccio vedere un pezzetto di codice che ho scritto per qualche post fa.

Codice: Seleziona tutto

function scegli (){
scelte=$(zenity --title "Risoluzioni finali" --text "Seleziona i formati di ridimensionamento" --list --checklist --print-column 2 --separator "\n" --column "Selezione" --column "Misure" $misure)
[ $? -ne 0 ] && exit 1 ; [ -z "$scelte" ] && scegli	# controlli
}

scegli
In pratica devi controllare che "$scelte" non sia vuoto, se è vuoto puoi richiamare nuovamente la funzione.
Spero che l'esempio possa esserti d'aiuto.

Se non ti è chiaro, il codice completo è a questa pagina
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Senza che tu ti offenda, questo è un forum e funziona coi suoi tempi.
... inoltre sto cercando di rispondere, ma ho la connessione malandata.

Venendo al problema, devi controllare come "esce" zenity, ovvero devi controllare il valore che assume la variabile $?
Ti faccio al volo un paio di esempi, poi non so se mi casca la connessione.
Il comando di zenity è sempre lo stesso:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~$ foo=`zenity --list --checklist --title "Cartella di destinazione" --text "selezionare la cartella di destinazione\!" --column "Selezione" --column                "CartellePersonali" False "Tecnologie" False "SistemiEReti" --width=600 --height=250`
Hai tre scenari, credo:
1) Premi OK avendo selezionato qualcosa

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~$ echo $?
0
vaevictis@vaevictis-HAL:~$ echo $foo 
Tecnologie
la variabile $? è settata a zero (perché zenity è terminato con successo) e in foo hai la tua selezione

2) Premi OK non avendo selezionato nulla:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~$ echo $?
0
vaevictis@vaevictis-HAL:~$ echo $foo 

zenity esce con "successo" quindi $? è sempre impostata a 0, ma in foo "non hai niente"

3) Premi annulla:

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~$ echo $?
1
vaevictis@vaevictis-HAL:~$ echo $foo 

In foo non hai niente come sopra... ma la variabile $? è settata a 1 perché zenity è "uscito male".

Anche l'altro caso si gestisce allo stesso modo.
Non ho possibilità di stare molto e farti un esempio di codice che ti aiuti meglio a modificare il tuo, ma si tratta solo di controllare questa variabile $?, che è uno dei parametri "speciali" di bash
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Scusa per l'impazienza , cmq grazie UbuNuovo e vaeVictis siete la mia salvezza !!! :p :p :lol: :lol:
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Sono impaziente di vedere la modifica al titolo del primo messaggio della discussione, con l'aggiunta di [Risolto].
:D :D
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema con Zenity

Messaggio da UbuNuovo »

A me non arrivano le notifiche...
intanto penso a Stallman :D
Salva l'Ucraina! 🇺🇦
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Posso approfittarne per fare un altra domandina sull'argomento ? :o

Codice: Seleziona tutto

#! /bin/bash 


#Mette nella variabille "sorgente" la path della cartella nella quale si trovano i file da copiare.
sorgente="/home/LDAPUsers/$USER/Documenti/" 

c=1
#Permette di terminare il programma premendo sul tasto "annulla"
while [ "$c" = "1" ]
	  do
                
                c=0
		#Mette nella variabille "sorgente" la path della cartella nella quale si trovano i file da copiare, indirizzo inserito da utente che risulta errato.
		sorgente=$(zenity --entry --title="Sorgente file" --text="Inserire Sorgente(indirizzo)
                Selezionare la cartella contenente i file che vogliono essere salvati!" --width=600 --height=250 --entry-text="$sorgente")

                #Controllo: esistenza cartella sorgente e manda a video un errore in caso essa non esista.
		if [ ! -e $sorgente ]
			then
			    zenity --error --text="La cartella sorgente inserita non è raggiungibile o insesistente\n\n RICONTROLLARE INDIRIZZO\!"
                            c=1
                fi
                
		
done
echo "$?"
if [ "$?" != "1" ]
              then
quando faccio "$?"
mi esce sempre zero sia che prema "annulla" che "ok"
:( :(
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema con Zenity

Messaggio da UbuNuovo »

'$?' contiene sempre il codice di uscita dell'ultima operazione eseguita.
Rileggi la spiegazione di VaeVictis e fai qualche prova.
Salva l'Ucraina! 🇺🇦
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

In questo caso di che operazione si parla ?
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema con Zenity

Messaggio da UbuNuovo »

Anche in caso di path inesistente imposti "c=1", l'assegnazione ha successo quindi hai come codice di uscita "0"
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Se dai un comando il suo exit code viene registrato nella variabile $?
Se fai la echo della variabile $?, quando poi ricontrolli $? vai a controllare l'exit code della echo, non di zenity.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4457
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Problema con Zenity

Messaggio da UbuNuovo »

vero c'è anche l'echo!!!
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: Problema con Zenity

Messaggio da vaeVictis »

Scrivi a parole il flusso logico di questo frammento di programma.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
NicoCale
Prode Principiante
Messaggi: 16
Iscrizione: domenica 18 maggio 2014, 11:12
Desktop: ubuntu
Distribuzione: Ubuntu14.04 x86_64

Re: Problema con Zenity

Messaggio da NicoCale »

Anche se tolgo la echo , il risultato è il medesimo , mi esce sempre 0

il programma...
mostra la finestra entry di zenity dove l'utente specifica l'indirizzo di una data cartella,
in caso la cartella non esista manda a video un errore e poi ripresenta la finestra entry di zenity con l'indirizzo precedentemente inserito dall'utente , poi fa la stessa cosa se non scrivi niente e premo "ok".
In caso invece l'utente schiacci annulla, il programma deve finire, saltando tutto il seguito con una if.
nella prima versione funzionava anche se non con entrembi gli errori , ma solo il primo e se si verificava , rimandava a video la finestra entry di zenity.
Ultima modifica di NicoCale il lunedì 23 giugno 2014, 0:36, modificato 3 volte in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti