¿Cómo puedo hacer una gráfica de línea de comandos en Haskell / Gtk2Hs?
Pregunta
Estoy intentando crear mi primer "programa real" en Haskell (algo que resuelve integrales si polinomios), pero estoy completamente perplejos con esta parte de ella:
Quiero hacer algo un poco muy simple como GHCi:
> user input
program output
> user input
program output
> user input
program output
>
excepto que mi salida del programa es imágenes (utilizando LaTeX para convertir expresiones matemáticas en PNG) - así que no puedo hacer esto utilizando System.IO. Creo que va a ser posible con Gtk2Hs la que he logrado instalar, pero no puedo encontrar la manera de hacer de este diálogo de entrada / salida.
Por favor, muéstrame cómo se hace si usted tiene el tiempo. ¡Muchas gracias!
Solución
arregló para llegar a la siguiente solución, gracias a ClaudiusMaximus.
module Main where
import Graphics.UI.Gtk
main = do
initGUI
----------------
win <- windowNew
onDestroy win mainQuit
vb <- vBoxNew False 3
log <- vBoxNew False 2
sc <- scrolledWindowNew Nothing Nothing
scrolledWindowSetPolicy sc PolicyNever PolicyAutomatic
sw <- layoutNew Nothing Nothing
en <- entryNew
----------------
scrolledWindowAddWithViewport sc log
boxPackStart vb sc PackGrow 0
boxPackStart vb en PackNatural 0
set win [ containerChild := vb ]
en `onEntryActivate` do
txt <- entryGetText en
entrySetText en ""
l <- labelNew (Just txt)
boxPackStart log l PackNatural 0
widgetShowAll log
Just ran <- scrolledWindowGetVScrollbar sc
adj <- rangeGetAdjustment ran
max <- adjustmentGetUpper adj
adjustmentSetValue adj max
----------------
widgetShowAll win
mainGUI
Otros consejos
creo que primero debe aplicar el back-end, es decir, el código para analizar un comando y la creación de la imagen de salida. Si funciona, entonces podría poner en práctica la interfaz gráfica de usuario. Básicamente, se necesita algo de luz una entrada de texto de entrada y un texto y widget de dibujo para la salida. Como la programación GUI es (en mi humilde opinión) no es trivial, primero debe mirar a algunos GTK / Gtk2Hs tutoriales / introducciones.