2012-08-01 42 views
0

我使用gtk2hs和glade創建了一個GUI,然後將它傳遞給main::IO()中的haskell代碼。然後,我有一些編碼的窗戶標籤按鈕進入文本說。例如,使用gtk2hs和glade的haskell中的GUI

entry   <- xmlGetWidget xml castToEntry "entry1" 
applyButton <- xmlGetWidget xml castToButton "button1" 

然後點擊applybutton

onClicked applyButton $ do 
number <- get entry entryText 

的值傳遞給一個變量

然後我寫了一個函數的平方數是這樣

sqr :: Int -> Int -> IO() 
sqr number = number * number 
後主GUI之後的

哪個不起作用!!!!!!

這應該是工作爲

I/P:從用戶那裏得到了一些在GUI

O/P:在GUI中顯示的數字廣場

+0

對不起,問題在哪裏? 另外,sqr不是很好的類型;你的意思是'sqr :: Int - > Int - > Int'? – 2012-08-01 08:46:17

+0

@JoachimBreitner抱歉,我之前並不清楚。希望現在很清楚...是的,我的意思是相同的... – Thenraja 2012-08-01 09:10:44

+0

也許[此IO教程](http://blog.sigfpe.com/2007/11/io-monad-for-people-who-simply -dont.html)或許多[monad]中的一個(http://blog.sigfpe.com/2006/08/you-could-have-invented-monads-and.html)[教程](http:// www.haskell.org/haskellwiki/All_about_monads)將是一個很好的下一步。 – 2012-08-01 09:19:42

回答

1

嗯,看來你將IO和計算部分混合在一起。

你有一個純函數來完成你所需要的計算,像這樣:

sqr :: Int -> Int -> Int 
sqr number = number * number 

而你需要通過發出一個IO動作,即更新GUI元素的狀態對事件作出反應。我假設你正試圖將該值輸入到相同的條目中。

onClicked applyButton $ do 
    num_str <- entryGetText entryText 
    let number = read num_str 
     squared = sqr number 
    entrySetText entryText (show squared) 

請採取注意,用繩子entryGetText /的setText工作,所以你需要轉換和從INTS。

+0

感謝您的指導。我有**編譯錯誤:不在範圍內'applyButton'**我已經在IO中聲明瞭applybutton,entrytext和其他元素。然後在sqr函數中,我已經完成了你所提到的計算部分 – Thenraja 2012-08-02 06:59:51

+0

沒有看到代碼很難說明原因(提示:使用pastebin),但仔細檢查標識符拼寫,記住,Haskell區分大小寫。另外,確保onClicked處理程序低於initialButton綁定。 – 2012-08-03 17:45:16

+0

我檢查了我的代碼並嘗試使用pastebin。仍然無法弄清楚...我可以在這裏粘貼我的代碼嗎? – Thenraja 2012-08-08 18:25:34