我正在编写我的第一个gtk2hs + glade应用程序,我正在使用textview来显示程序的输出。而不是我认为应该是默认行为的滚动,每次我重新设置文本时,textview变得更大,并使我的按钮在它下面变小,直到它们消失,但滚动条永远不会弹出,它永远不会滚动。我应该做一些特别的事情让它滚动吗?这是我目前正在使用的主要功能,请原谅脏代码,我打算稍后清理。 :)
main :: FilePath -> IO ()
main gladepath = do
initGUI
-- Create inital game state
st <- newIORef (State "" "" "" 0 0 0)
-- Get handles to all needed widgets from Glade file
Just xml <- xmlNew gladepath
mw <- xmlGetWidget xml castToWindow "mainWindow"
sw <- xmlGetWidget xml castToWindow "window2"
mb <- xmlGetWidget xml castToButton "fireButton"
ng <- xmlGetWidget xml castToButton "nbutton"
mv <- xmlGetWidget xml castToTextView "textview1"
but <- xmlGetWidget xml castToButton "button1"
ab <- xmlGetWidget xml castToAboutDialog "aboutdialog1"
menu <- xmlGetWidget xml castToMenuItem "menuitem3"
about <- xmlGetWidget xml castToMenuItem "imagemenuitem10"
quitb <- xmlGetWidget xml castToMenuItem "menuitem3"
p1name <- xmlGetWidget xml castToEntry "entry1"
p2name <- xmlGetWidget xml castToEntry "entry2"
spin <- xmlGetWidget xml castToSpinButton "spinbutton1"
sett <- xmlGetWidget xml castToMenuItem "menuitem2"
p1lab <- xmlGetWidget xml castToLabel "label4"
p2lab <- xmlGetWidget xml castToLabel "label5"
cylab <- xmlGetWidget xml castToLabel "label6"
-- Handle events and such
buff <- textViewGetBuffer mv
onActivateLeaf quitb mainQuit
onResponse ab $ \resp ->
case resp of
ResponseClose -> widgetHide ab
_ -> widgetHide ab
onActivateLeaf about $ widgetShow ab
onActivateLeaf sett $ widgetShowAll sw
onDelete sw $ \_ -> widgetHide sw >> return True
onClicked but $
initalize sw p1name p2name spin st p1lab p2lab cylab buff
onClicked ng $ widgetShowAll sw
onDelete ab $ \_ -> widgetHide ab >> return True
onClicked mb $ fireButton st sw buff cylab
onActivateLeaf menu $ widgetDestroy mw
onDestroy mw mainQuit
widgetShowAll mw
mainGUI
如果您还有其他需要,请在评论中提出要求。我不确定是否需要提供其他任何东西。
林间空地文件太大而无法在此显示,但我将其粘贴在此处,以防有人需要它:http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310
答案 0 :(得分:3)
在gtk2hs邮件列表上与Axel交谈后,我设法解决了自己的问题。
TextViews的设计使它们可以是单行文本,或带有滚动条的多行TextView。如果您想要滚动功能,则必须将TextView放入滚动窗口。我通过将TextView放入滚动窗口解决了我的问题,它现在运行得很好。