2010-11-26 11 views
7

मैं हास्केल में मेरा पहला "वास्तविक कार्यक्रम" बनाने के लिए कोशिश कर रहा हूँ (कुछ है कि अभिन्न यदि बहुआयामी पद को हल करती है), लेकिन मैं पूरी तरह से यह के इस भाग के साथ स्टम्प्ड हूँ:मैं हैकेल/gtk2hs में ग्राफिकल कमांड लाइन कैसे बना सकता हूं?

मैं बहुत सरल कुछ एक सा की तरह बनाना चाहते GHCi:

> user input 
program output 
> user input 
program output 
> user input 
program output 
> 
सिवाय इसके कि मेरा कार्यक्रम उत्पादन छवियों (PNG का में गणितीय अभिव्यक्ति चालू करने के लिए LaTeX का उपयोग) है

- तो मैं इस System.IO का उपयोग कर ऐसा नहीं कर सकते। मुझे लगता है कि यह gtk2hs के साथ संभव होगा जिसे मैंने इंस्टॉल करने में कामयाब रहा है लेकिन मैं यह नहीं समझ सकता कि यह इनपुट/आउटपुट संवाद कैसे करें।

कृपया मुझे दिखाएं कि आपके पास समय होने पर यह कैसे किया जाता है। आपका बहुत बहुत धन्यवाद!

+0

मैंने सोचा कि मैंने कहीं Haskell में एक ग्राफिंग प्रोग्राम देखा है, लेकिन मुझे यह प्रतीत नहीं होता है। फिर फिर, मुझे पूरी तरह से यकीन नहीं है कि यह हास्केल में भी था। –

उत्तर

4

क्लाउडियस मैक्सिमस के लिए धन्यवाद, हम निम्नलिखित समाधान के साथ आने में कामयाब रहे।

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 
0

मुझे लगता है कि आपको पहले बैकएंड लागू करना चाहिए, यानी कमांड को पार्स करने और आउटपुट छवि बनाने के लिए कोड। यदि यह काम करता है, तो आप जीयूआई लागू कर सकते हैं। असल में, आपको इनपुट के लिए टेक्स्ट एंट्री और आउटपुट के लिए टेक्स्ट और ड्राइंग विजेट की आवश्यकता होती है। चूंकि जीयूआई प्रोग्रामिंग (आईएमएचओ) छोटा नहीं है, आपको पहले कुछ जीटीके/gtk2hs ट्यूटोरियल/परिचय देखना चाहिए।

संबंधित मुद्दे