Проблемы с прокруткой в TextView в Gtk2hs и Haskell
Вопрос
Я пишу свое первое приложение 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
Если вам нужно что-то еще, пожалуйста, отправьте запрос в комментарии.Я не уверен, нужно ли мне предоставлять что-то еще.
Файл glade слишком велик, чтобы показывать его здесь, но я вставил его сюда на случай, если он кому-то понадобится: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310
Решение
Мне удалось решить свою собственную проблему после разговора с Акселем в списке рассылки gtk2hs.
Текстовые представления спроектированы таким образом, что они могут представлять собой одну строку текста или многострочное текстовое представление с полосами прокрутки.Если вам нужны возможности прокрутки, вы должны поместить TextView в прокручиваемое окно.Я решил свою проблему, поместив свой TextView в Прокручиваемое окно, теперь он работает отлично.