Domanda

Sto scrivendo la mia prima applicazione gtk2hs + glade e sto usando una visualizzazione di testo per visualizzare l'output del programma. Invece di scorrere, che pensavo dovesse essere il comportamento predefinito, la visualizzazione del testo diventa più grande ogni volta che reimposto il testo e rimpicciolisco i pulsanti sottostanti finché non scompaiono, ma le barre di scorrimento non vengono mai visualizzate e non scorre mai. Dovrei fare qualcosa di speciale per farlo scorrere? Ecco la funzione principale che sto usando al momento, perdona il codice sporco, intendo pulire la casa più tardi. :)

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

Se hai bisogno di qualcos'altro, ti preghiamo di richiederlo in un commento. Non sono sicuro se devo fornire qualcos'altro.

Il file glade è troppo grande per essere mostrato qui, ma l'ho incollato qui nel caso qualcuno ne abbia bisogno: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310

È stato utile?

Soluzione

Sono riuscito a risolvere il mio problema dopo aver parlato con Axel nella mailing list di gtk2hs.

Le visualizzazioni di testo sono progettate in modo che possano essere una singola riga di testo o una visualizzazione di testo multilinea con barre di scorrimento. Se si desidera funzionalità di scorrimento, è necessario inserire TextView in una finestra di scorrimento. Ho risolto il mio problema posizionando TextView in una finestra a scorrimento, ora funziona perfettamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top