كيف يمكنني صنع سطر أوامر رسومي في Haskell/GTK2HS؟

StackOverflow https://stackoverflow.com/questions/4281984

  •  28-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء أول برنامج "برنامج حقيقي" في 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top