使用gtk2hs和glade的haskell中的GUI
我使用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中显示的数字广场
嗯,看来你将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。
感谢您的指导。我有**编译错误:不在范围内'applyButton'**我已经在IO中声明了applybutton,entrytext和其他元素。然后在sqr函数中,我已经完成了你所提到的计算部分 – Thenraja 2012-08-02 06:59:51
没有看到代码很难说明原因(提示:使用pastebin),但仔细检查标识符拼写,记住,Haskell区分大小写。另外,确保onClicked处理程序低于initialButton绑定。 – 2012-08-03 17:45:16
我检查了我的代码并尝试使用pastebin。仍然无法弄清楚...我可以在这里粘贴我的代码吗? – Thenraja 2012-08-08 18:25:34
对不起,问题在哪里? 另外,sqr不是很好的类型;你的意思是'sqr :: Int - > Int - > Int'? – 2012-08-01 08:46:17
@JoachimBreitner抱歉,我之前并不清楚。希望现在很清楚...是的,我的意思是相同的... – Thenraja 2012-08-01 09:10:44
也许[此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