Проблемы с прокруткой в ​​TextView в Gtk2hs и Haskell

Asked
Viewd603

1

Я пишу свое первое приложение gtk2hs + glade и использую текстовое представление для отображения вывода программы. Вместо прокрутки, которая, как я думал, должна была быть поведением по умолчанию, текстовое поле становится больше каждый раз, когда я повторно устанавливаю текст, и уменьшает мои кнопки под ним, пока они не исчезнут, но полосы прокрутки никогда не появляются и никогда не прокручиваются. Должен ли я сделать что-то особенное, чтобы он прокручивался? Вот основная функция, которую я использую в данный момент, простите за грязный код, я собираюсь убрать ее позже. :)

 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

  • Достаточно ли малы размеры Glade XML, чтобы его можно было сюда включить?

    ephemient28 июня 2009, 00:48
  • Отредактировано для ссылки на файл поляны, вставлено.

    Rayne28 июня 2009, 00:53

1 ответов

3

Мне удалось решить свою проблему после разговора с Акселем в списке рассылки gtk2hs.

TextView спроектированы таким образом, что они могут быть одной строкой текста или многострочным TextView с полосами прокрутки. Если вам нужны возможности прокрутки, вы должны поместить TextView в прокручиваемое окно. Я решил свою проблему, поместив свой TextView в прокручиваемое окно, теперь он отлично работает.