Interfaces gráficas con YAD
Aínda en obras
Sumario
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
#!/bin/bash yad --text "Isto é unha mostra" echo $? #.EOF
Caso 2
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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":IDxa que iso permitiranos empregar variábeis sen ter problemas pola lonxitude.
- Por exemplo:
Se o que queremos é que non apareza ningún botón, empregaremos --no-buttons
Exemplo 5
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
#!/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
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
#!/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
#!/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