Come posso fare una linea di comando grafica in Haskell / gtk2hs?
Domanda
Sto cercando di creare il mio primo "vero e proprio programma" in Haskell (cosa che risolve integrali se polinomi) ma io sono completamente confusi con questa parte di esso:
Voglio fare qualcosa di molto semplice po 'un simile GHCi:
> user input
program output
> user input
program output
> user input
program output
>
Se non fosse che la mia uscita programma è immagini (utilizzando LaTeX per trasformare espressioni matematiche in PNG) - quindi non posso fare questo using System.IO. Penso che sarà possibile con gtk2hs che sono riuscito a installare, ma io non riesco a capire come rendere questo dialogo di input / output.
Si prega di farmi vedere come è fatto, se avete il tempo. Grazie mille!
Soluzione
Siamo riusciti a venire con la seguente soluzione, grazie alla 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
Altri suggerimenti
Penso che si dovrebbe prima implementare il backend, vale a dire il codice per il parsing di un comando e di creare l'immagine di output. Se funziona, si potrebbe quindi implementare l'interfaccia grafica. Fondamentalmente, è necessario qualcosa di leggero una voce di testo per l'input e un testo e widget di disegno per l'uscita. Come programmazione GUI è (secondo me) non è banale, si deve prima guarda ad alcuni GTK / gtk2hs tutorial / introduzioni.