Interfaces gráficas con YAD
Aínda en obras
Contenido
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":ID
xa 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