كيف يمكنني صنع سطر أوامر رسومي في Haskell/GTK2HS؟
سؤال
أحاول إنشاء أول برنامج "برنامج حقيقي" في Haskell (شيء يحل التكامل إذا متعدد الحدود) ، لكنني مضغوط تمامًا مع هذا الجزء منه:
أريد أن أصنع شيئًا بسيطًا جدًا مثل GHCI:
> user input
program output
> user input
program output
> user input
program output
>
باستثناء أن إخراج البرنامج الخاص بي هو الصور (باستخدام LaTeX لتحويل التعبيرات الرياضية إلى PNGS) - لذلك لا يمكنني القيام بذلك باستخدام System.io. أعتقد أنه سيكون من الممكن مع GTK2HS التي تمكنت من تثبيتها ولكن لا يمكنني معرفة كيفية إجراء حوار الإدخال/الإخراج هذا.
من فضلك أرني كيف يتم ذلك إذا كان لديك الوقت. شكرًا جزيلاً!
المحلول
تمكنا من التوصل إلى الحل التالي ، وذلك بفضل 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
نصائح أخرى
أعتقد أنه يجب عليك أولاً تنفيذ الواجهة الخلفية ، أي الرمز لتحليل الأمر وإنشاء صورة الإخراج. إذا نجح ذلك ، يمكنك بعد ذلك تنفيذ واجهة المستخدم الرسومية. في الأساس ، تحتاج إلى شيء إضاءة إدخال نص للإدخال ونص ورسم عنصر واجهة مستخدم للإخراج. نظرًا لأن برمجة واجهة المستخدم الرسومية (IMHO) ليست تافهة ، فيجب عليك أولاً إلقاء نظرة على بعض البرامج التعليمية / مقدمات GTK / GTK2HS.