Wie kann ich eine grafische Befehlszeile in Haskell / gtk2hs machen?
Frage
Ich versuche, mein erstes „richtiges Programm“ in Haskell (etwas, dass lösen Integrale, wenn Polynome) zu schaffen, aber ich vollständig mit diesem Teil davon stapfe mich:
Ich möchte etwas sehr einfach ein bisschen wie GHCi machen:
> user input
program output
> user input
program output
> user input
program output
>
, außer dass mein Programm ausgegeben werden, Bilder (mit LaTeX mathematischen Ausdrücke in PNGs drehen) - so kann ich dies mit System.IO nicht tun. Ich denke, dass es möglich sein wird, mit gtk2hs, die ich habe es geschafft, zu installieren, aber ich kann nicht herausfinden, wie man diese Eingabe / Ausgabe-Dialog zu machen.
Sie mir bitte zeigen, wie es gemacht wird, wenn Sie die Zeit haben. Vielen Dank!
Lösung
Wir haben es geschafft mit der folgenden Lösung zu kommen, dank 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
Andere Tipps
Ich glaube, Sie sollten zuerst das Backend implementieren, das heißt der Code für einen Befehl Parsen und das Ausgangsbild. Wenn das funktioniert, könnten Sie dann die GUI implementieren. Grundsätzlich müssen Sie etwas Licht einen Texteintrag für Eingang und einen Text und Zeichnung Widget für die Ausgabe. Als GUI-Programmierung (IMHO) nicht trivial ist, sollten Sie bei einigen GTK / gtk2hs tutorials / Einführungen ersten Blick.