2009-06-27 66 views
1

我正在编写我的第一个gtk2hs + glade应用程序,并且我使用textview来显示程序的输出。而不是滚动,我认为这应该是默认行为,每次我重新设置文本时,textview变得更大,并使它下面的按钮变小,直到它们消失,但滚动条永不弹出,并且它从不滚动。我应该做些特别的事情来让它滚动吗?这里是我目前使用的主要功能,请原谅脏代码,我打算晚些时候进行清理。 :)在Gtk2hs和Haskell中滚动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

Glade XML是否足够小以包含在这里? – ephemient 2009-06-28 00:48:45

回答

3

我已经成功的gtk2hs邮件列表与阿克塞尔后说,解决我自己的问题。

TextViews的设计使它们可以是单行文本,也可以是带滚动条的多行TextView。如果您想要滚动功能,则必须将TextView放入滚动窗口中。我通过将我的TextView放入滚动窗口来解决我的问题,它现在完美地工作。