2009-05-29 42 views
58

Quiero hacer algunos cuadros de diálogo gráficos para mi script, pero no sé cómo. Escuché algo sobre GTK-Server o algo así. Si alguien sabe cómo unir Bash con tcl/tk, también estoy satisfecho.¿Cómo hacer una GUI para scripts bash?

Por favor, no publique algo así como "cambiar a C++" porque mi proyecto debe ser un script en Bash; No hay otras opciones.

¿Alguna idea?

EDIT: Gracias por las respuestas, pero no quiero "gráficos" como en colores en la consola, pero las ventanas gráficas que puedo mover, minimizar etc. que pondrá a prueba xmessage, pero no lo hago Creo que será lo que estoy buscando.

EDIT 2: no quiero hacer un diálogo sencillo, como sí/no, pero alguna de las interfaces como las barras y botones de avance, algo así como un juego.

+0

Definitivamente quiere 'zenity'. – jmc

+1

En los viejos tiempos había "dtksh" una implementación ksh-93 con acceso a bibliotecas Motif. Puede establecer devoluciones de llamadas de funciones de shell y realizar una aplicación gráfica completa con scripts de shell. Contenía diálogo, botón, cuadro de texto, botón de radio, ... – Emmanuel

+0

Eche un vistazo a ['tkbash'.] (Https://github.com/phil294/tkbash) – Blauhirn

Respuesta

55

Antes de utilizar realmente los diálogos de GUI, considere usar los mensajes de la consola. Muy a menudo puede salirse con la simple "y/n?" le pide, que en bash a alcanzar a través de la read command ..

read -p "Do something? "; 
if [ $REPLY == "y" ]; then 
    echo yay; 
fi 

Si indicador de la consola es sólo no se corte, Zenity es realmente easy to use, por ejemplo:

 zenity --error --text="Testing..." 
     zenity --question --text="Continue?" 

Esto sólo funciona en Linux/Gnome (o más bien, solo se instalará por defecto en tales sistemas).El método read funcionará prácticamente en cualquier plataforma (incluidas las máquinas sin cabeza oa través de SSH)

Si necesita algo más complejo que lo que lee o proporciona Zenity, "cambiar a C++" es realmente el mejor método (aunque yo ' d recomendar Python/Ruby sobre C++ para tales tareas de reemplazo de guiones de shell)

Quiero hacer interfaz simple para un juego extraño, la barra de progreso para la salud o algo así es el ejemplo de lo que quiero. Variable "salud" es 34, así que la barra de progreso rellena 34/100

como un script de línea de comandos, que haría uso de Python:

$ export HEALTH=34 
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))" 
********************************** 

O para normalizar los valores entre 1 y 78 (para que no se obtiene al ajuste de líneas en un terminal de tamaño estándar):

$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0))/100.0) * 78)" 

Zenity también tiene un Progress Dialog,

#!/bin/sh 
(
echo "10" ; sleep 1 
echo "# Updating mail logs" ; sleep 1 
echo "20" ; sleep 1 
echo "# Resetting cron jobs" ; sleep 1 
echo "50" ; sleep 1 
echo "This line will just be ignored" ; sleep 1 
echo "75" ; sleep 1 
echo "# Rebooting system" ; sleep 1 
echo "100" ; sleep 1 
) | 
zenity --progress \ 
    --title="Update System Logs" \ 
    --text="Scanning mail logs..." \ 
    --percentage=0 

if [ "$?" = -1 ] ; then 
     zenity --error \ 
      --text="Update canceled." 
fi 

Como dije antes, si Zenity no puede hacer lo que necesita, analice su escritura de juego como una secuencia de comandos "adecuada" en Python/Ruby/Perl/C++/etc, ya que parece que está superando los límites de qué puede hacer un script de shell.

+1

No quiero el sí/no, pero quiero hacer una interfaz simple para algún juego extraño, la barra de progreso para la salud o algo así es el ejemplo de lo que quiero. La variable "SALUD" es 34, por lo que la barra de progreso debe estar llena 34/100. Eso quiero hacer. – lauriys

2

Al parecer, alguien ha escrito una interfaz bash para GTK +. No estoy seguro si puede hacerlo funcionar fácilmente, pero podría valer la pena intentarlo. Lo puedes encontrar aquí:

http://home.eol.ca/~parkw/index.html#gtk

13

hay un comando llamado dialog que utiliza la biblioteca ncurses. "diálogo es un programa que le permitirá a presentar una variedad de preguntas o mensajes de la pantalla utilizando los cuadros de diálogo de un script de shell. Se implementan Estos tipos de cuadros de diálogo (aunque no todos se compilan necesariamente en diálogo)"

ver http://pwet.fr/man/linux/commandes/dialog

+1

Es bastante gracioso, solo estaba instalando una versión de la utilidad cuando examiné su respuesta. Diálogo funciona bastante bien, creo. –

13

Bueno, si puede usar Tcl/Tk en su entorno, probablemente debería escribir un script TCL y usarlo. También puede consultar wish.

+0

pero eso no es bash – Blauhirn

3

Si tiene Qt/KDE instalado, puede usar kdialog, que aparece en la ventana de diálogo de Qt. Puede especificar fácilmente que se muestre un cuadro de diálogo Sí/No, Aceptar/Cancelar, entrada de texto simple, ingreso de contraseña, etc. A continuación, tendrá acceso a los valores de retorno de estos cuadros de diálogo en el shell.

18

Si desea escribir una interfaz gráfica de usuario en bash, zenity es el camino a seguir. Esto es lo que puede hacer con él:

Application Options: 
    --calendar          Display calendar dialog 
    --entry          Display text entry dialog 
    --error          Display error dialog 
    --info           Display info dialog 
    --file-selection        Display file selection dialog 
    --list           Display list dialog 
    --notification         Display notification 
    --progress          Display progress indication dialog 
    --question          Display question dialog 
    --warning          Display warning dialog 
    --scale          Display scale dialog 
    --text-info         Display text information dialog 

Combinando estos widgets puede crear GUI bastante útiles. Por supuesto, no es una herramienta flexible como un juego de herramientas integrado en un lenguaje de programación, pero en algunos casos es realmente útil.

6

Por favor, echa un vistazo a mi biblioteca: http://sites.google.com/site/easybashgui

Se tiene la intención de manejar, con los mismos comandos establecidos, indiferentemente de las cuatro grandes herramientas "kdialog", "Xdialog", "cdialog" y "zenity", dependiendo de si X se está ejecutando o no, si DE es KDE o Gnome u otro. Hay 15 funciones diferentes (entre ellos hay dos llamado "progreso" y "ajustar") ...

adiós :-)

+0

genial, entonces es un adaptador. ¿Se requieren las herramientas compatibles o lib usará lo que encuentre, compatible con el entorno detectado? – drAlberT

+0

Este es bastante bueno en realidad. El programador bash no necesita preocuparse por la plataforma en la que el usuario utilizará KDE o gnome; detectará automáticamente el entorno y mostrará la interfaz de usuario de acuerdo con las bibliotecas disponibles. – shivams

Cuestiones relacionadas