Interfaces gráficas con YAD

De GALPon WiKi

Aínda en obras

Instalación

Debian - repositorio oficial do desenvolvedor

Descarga directa do -deb → http://debs.slavino.sk/pool/main/y/yad/


PPA de Ubuntu


Archlinux


Cousas básicas

Saída estándar, botóns e caixa $?
OK/Aceptar 0
Cancelar 1
Pechar a xanela 252


Exemplo 1

Caso 1

Yad 1-1.png

#!/bin/bash
yad --text "Isto é unha mostra"
echo $?

#.EOF

Caso 2

Yad 1-2.png

#!/bin/bash
yad --entry --text "Escriba un texto"
echo $?

#.EOF

Observade a saída no terminal ao pechar a xanela nos dous casos e coas 3 opcións [OK] [Cancelar] e na [X] da barra superior do marco (pechar a xanela).

texto_escrito
0


Exemplo 2

Caso 1

Yad 2-1.png

#!/bin/bash
TXT1="\n\tArrastra un ficheiro e soltalo sobre esta xanela \t\n"
TXT2="Arrastra un ficheiro e\nsoltalo sobre esta xanela"

ENTRADA=$(yad --dnd \
	--title "Drag & Drop" \
	--text "$TXT1" \
	--image "insert-object"
	)

#.EOF

Caso 2

Yad 2-2.png

#!/bin/bash

TXT1="\n\tArrastra un ficheiro e soltalo sobre esta xanela \t\n"
TXT2="Arrastra un ficheiro e\nsoltalo sobre esta xanela"

ENTRADA=$(yad --dnd \
	--title "Drag & Drop" \
	--text "$TXT2" \
	--image "insert-object"
	)

#.EOF

Fixádevos que a única diferencia entre os dous casos é o uso das varíabeis $TXT1 ou $TXT2

Caso 3

Yad 2-3a.png Yad 2-3b.png

#!/bin/bash

TXT1="\n\tArrastra un ficheiro e soltalo sobre esta xanela \t\n"
TXT2="Arrastra un ficheiro e soltalo sobre esta xanela"

ENTRADA=$(yad --dnd \
	--title "Drag & Drop" \
	--text "$TXT1" \
	--image "insert-object" \
	--tooltip
	)

#.EOF

Observade que nos --tooltip só pode empregarse texto simple

Facede a proba de substituír a variábel $TXT1 pola variábel $TXT2


Exemplo 3

Yad 3.png

#!/bin/bash
yad --notification \
	--image=firefox \
	--text "Prema aquí para executar firefox" \
	--command "firefox"

#.EOF

ou

#!/bin/bash
yad --notification \
	--image=update.png \
	--text "É necesario actualizar o sistema!" \
	--command "x-terminal-emulator -e  sudo apt-get update && sudo apt-get upgrade"

#.EOF

Exemplo 4

Yad 4.png

#!/bin/bash
yad \
	--title="Editor de ficheiros \".desktop\""  \
	--image="user-desktop" \
	--text="Editor sinxelo de ficheiros de execución \"desktop\""  \
	--form --field="Type:CB"  \
		--field="Name"  \
		--field="Generic name"  \
		--field="Comment"  \
		--field="Command:FL"  \
		--field="Icon" \
		--field="In terminal:CHK"  \
		--field="Startup notify:CHK" \
			"Application!Script!Proba" \
			"Nome" \
			"Nome xenérico" \
			"Escriba aquí un comentario" \
			"/usr/bin/yad" \
			"yad" \
			FALSE \
			TRUE  \
		--button="GALPon - Help:2"  \
		--button="gtk-ok:0" \
		--button="gtk-cancel:1"yad
ret=$?

[[ $ret -eq 2 ]] && xdg-open http://wiki.galpon.org/Portada#Documentaci.C3.B3n_e_manuais

#.EOF

Variante da saída

if [ $? = 2 ]; then
	x-www-browser http://galpon.org		
fi


Definición dos botóns:

Yad presenta, de xeito predeterminado, os botóns Cancel e OK

Se queremos modificar estes botón temos que ter en conta algunhas cousas.

A partires do momento no que se define un botón, só aparecerá o botón definido, desaparecendo os predeterminados, polo que se queremos ter, por exemplo os botóns [Pechar] e [OK] teremos que definir os dous, podemos definir tantos como queiramos
--button=BOTÓN:ID
  • ID é a saída de código que devolve ese botón. (ver man yad → EXIT SATATUS)
  • BOTÓN pode ser un nome gtk do «stock» de botóns predefinidos (como gtk-yes, gtk-no, gtk-close, gtk-ok, etc.) ou, simplemente, unha etiqueta de texto. (ver as referencia no final desta páxina)

Seguindo o indicado anteriormente dos botóns [Pechar] e [OK] é así:

--button gtk-close --button gtk-ok

Se quixeramos empregar outros nomes pode ser así:

--button=Saír:1 --button=Executar:0

Os botóns aparecerán na mesma orde na que se definan.

Nota: a etiqueta BOTÓN pode ser unha variábel

BUT1="Saír"
BUT2="Continuar"
--button="$BUT1":1 --button="$BUT2":0
  • Lembrar, se o texto/etiqueta do botón contén máis dunha palabra, teremos que poñelo entre comiñas dobres inglesas ou entre comiñas simples inglesas
Por exemplo: --button='Volver atrás':2
Recomendo empregar sempre a estrutura --button="texto etiqueta":ID xa que iso permitiranos empregar variábeis sen ter problemas pola lonxitude.

Se o que queremos é que non apareza ningún botón, empregaremos --no-buttons

Exemplo 5

Yad 5a.png Yad 5b.png

nota: este script tes que executalo con bash ./nome_script

#!/bin/bash

SITES=(http://galpon.org http://galpon.org https://plus.google.com/u/0/communities/110138195617978620622 http://www.minino.galpon.org)

VALOR=$(yad --entry \
       --title='Coñecer o MiniNo' \
       --width="400" --height="150" \ 
       --entry-label="Url:" \
       --entry-text="${SITES[@]}"  \
       --completion \
       --licon="favicon.png" \
       --licon-action="echo http://www.minino.galpon.org" \
       --ricon="gtk-clear" \
       --ricon-action="echo "
       )

[ "$VALOR" ] && xdg-open "$VALOR"

#.EOF


Exemplo 6

Yad 6.png

#!/bin/bash

case $LANG in
	es*)	TXTROOT="Tiene que ejecutar este script con «sudo»";;
	gl*)	TXTROOT="Ten que executar este script con «sudo»";;
esac

[[ $(id -u) -ne 0 ]] && {
	echo
	echo "$TXTROOT"
	echo
	yad --button="gtk-close" \
		--window-icon="face-angry"\
		--image="face-angry" \
		--title="$TIT2" \
		--text="\n\t<span size='large' color='red'><b>$TXTROOT\t</b></span>"
	exit 1
}

#.EOF

Exemplo 7

Yad 7.png

Nota: Para que poidades probalo correctamente (que se execute), na primeira liña

[[ ! -f /etc/X11/Xsession.d/51x11reload-desktop ]] && {

incluín a negación ! para que vos funcione, para o caso práctico real debe ser:

[[ -f /etc/X11/Xsession.d/51x11reload-desktop ]] && {
#!/bin/bash

case $LANG in
	es*)
		WARN1="Se detecto la presencia, en funcionamiento, del congelador de escritorios."
		WARN2="Esta aplicación de sincronización es incompatible con la congelación de escritorios."
		WARN3="Aúnque ambas guardan una cierta relación, su uso se aplica a causísticas muy distintas."
		WARN4="Si prefiere utilizar esta sincronización, primero debe desactivar la congelación."
		WARN5="Se abandona el procedimiento de sincronización."
	;;
	gl*)
		WARN1="Detectouse a presencia, en funcionamento, do conxelador de escritorios."
		WARN2="Esta aplicación de sincronización é incompatíbel coa conxelación de escritorios."
		WARN3="Ainda que ambas gardan unha certa relación, o seu uso aplicase a causísticas moi distintas."
		WARN4="Se prefire utilizar esta sincronización, primeiro debe desactivar a conxelación."
		WARN5="Abandonase o procedemento de sincronización."
	;;
esac

[[ ! -f /etc/X11/Xsession.d/51x11reload-desktop ]] && {
	yad --button="gtk-close" \
		--window-icon="face-uncertain"\
		--image="face-uncertain" \
		--title="$TIT2" \
		--text="\n${WARN1}\n\n${WARN2}\n\n${WARN3}\n\n${WARN4}\n\n<span size='large' color='red'>${WARN5}</span>\n"
	exit 1
}

#.EOF

Exemplo 8

Yad 8a.png Yad 8b.png

#!/bin/bash

case $LANG in
	es*)
		TIT1="Sincronización de equipos"
		TEXT1="Escoja la opción que determina la forma en que quiere sincronizar sus equipos."
		TEXT2="Seguidamente introduzca los números de los equipos que quiera sincronizar.\n\tPor ejemplo: <i>102 104 165</i>\nSi deja esta entrada en blanco se sincronizarán todos los equipos."
		FIELD1="Quiero hacer una sincronización"
		CBOX1a="GLOBAL"
		CBOX1b="todo el entorno de usuario"
		CBOX2a="BÁSICA"
		CBOX2b="todo, excepto la carpeta personal"
		CBOX3a="PERSONAL"
		CBOX3b="sólo la carpeta personal"
		CBOX4a="CONFIGURACIONES"
		CBOX4b="sólo las configuraciones"
		FIELD2="Equipos a sincronizar"
	;;
	gl*)
		TIT1="Sincronización de equipos"
		TEXT1="Escolla a opción que determina a forma na que quere sincronizar os seus equipos."
		TEXT2="De segido introduza os números dos equipos que queira sincronizar.\n\tPor exemplo: <i>102 104 165</i>\nSe deixa esta entrada en branco sincronizaranse todos os equipos."
		FIELD1="Quero facer unha sincronización"
		CBOX1a="GLOBAL"
		CBOX1b="todo o entorno do usuario"
		CBOX2a="BÁSICA"
		CBOX2b="todo, agás o cartafol persoal"
		CBOX3a="PERSOAL"
		CBOX3b="só o cartafol persoal"
		CBOX4a="CONFIGURACIÓNS"
		CBOX4b="só as configuracións"
		FIELD2="Equipos a sincronizar"
	;;
esac

OPCION=$(yad \
	--icon=dialog-question \
	--image=preferences-system-network \
	--title "${TIT1}" \
	--text "${TEXT1}\n\n${TEXT2}" \
	--form --field="${FIELD1}:CB" \
		--field="${FIELD2}" \
			"${CBOX1a}: ${CBOX1b}!${CBOX2a}: ${CBOX2b}!${CBOX3a}: ${CBOX3b}!${CBOX4a}: ${CBOX4b}" )

#.EOF
			
OPCION devolve: Opción escollida con todo o texto|equipo equipo equipo|
Por exemplo: BÁSICA: todo agás o cartafol persoal|102 104 165

Exemplo 9

Yad 9a.png

Yad 9b.png

#!/bin/bash

case $LANG in
	es*)
		TIT1="Configuración de la red LAN de un aula"
		TXT1="Escoja la opción que quiere aplicar"
		BUT1="Salir"
		BUT2="Continuar"
		ASK1="Configurar un equipo principal o maestro"
		TIP1="Crea la configuración de red LAN del equipo principal del aula, que se corresponde con el equipo del profesorado"
		ASK2="Configurar un equipo alumno"
		TIP2="Crea la configuración de red LAN de un equipo secundario del aula, que se corresponde con un equipo del alumnado"
		ASK3="Deshacer la configuración de red de aula"
		TIP3="Retira toda la configuración de red LAN hecha en este equipo y devuelve la configuración inicial"
		TIT2="Aviso"
		TXT2="Debe escoger una opción"
		BUT3="Volver"
	;;
	gl*)
		TIT1="Configuración da rede LAN dunha aula"
		TXT1="Escolla a opción que quere aplicar"
		BUT1="Saír"
		BUT2="Continuar"
		ASK1="Configurar un equipo principal ou mestre"
		TIP1="Crea a configuración de rede LAN do equipo principal da aula, que se corresponde co equipo do profesorado"
		ASK2="Configurar un equipo alumno"
		TIP2="Crea a configuración de rede LAN dun equipo secundario da aula, que se corresponde cun equipo do alumnado"
		ASK3="Desfacer a configuración de rede de aula"
		TIP3="Retira toda a configuración de rede LAN feita neste equipo e devolve a configuración inicial"
		TIT2="Aviso"
		TXT2="Debe escoller unha opción"
		BUT3="Volver"
	;;
esac

show_option(){
	ESCOLLIDO=$( yad --list \
		--window-icon="network-workgroup" \
		--image="network-workgroup" \
		--title="$TIT1" \
		--text="<b>$TXT1 </b>" \
		--print-column=1 \
		--no-headers \
		--column=control:NUM \
		--column=action \
		--column=tooltip:TIP \
		--hide-column=1 \
		--width="360" \
		--height="170" \
		--button="$BUT1":1 \
		--button="$BUT2":0 \
		1 "$ASK1          " "$TIP1" \
		2 "$ASK2          " "$TIP2" \
		3 "$ASK3          " "$TIP3"
		)

		if [ $? != 0 ]; then
			exit
		fi

	#--image=network-server \
	#--image=preferences-system-network \ 
	
	#capturar só o numero da opción seleccionada
	ESCOLLIDO=$(echo $ESCOLLIDO | egrep -o '^[0-9]')

	if [ "${ESCOLLIDO}" = "" ]; then
		yad --window-icon="face-angry"\
			--image="face-angry" \
			--title="$TIT2" \
			--text "\n<b>$TXT2 </b>" \
			--button="$BUT1":1 \
			--button="$BUT3":0
		if [ $? = 0 ]; then
			show_option
		else
			exit
		fi
	fi
}

show_option

#.EOF