Question

J'écris ma première application gtk2hs + Glade et j'utilise une vue en mode texte pour afficher les résultats du programme. Au lieu de faire défiler ce que je pensais être le comportement par défaut, la vue du texte s'agrandit à chaque fois que je redéfinis le texte et rend mes boutons plus petits jusqu'à ce qu'ils disparaissent, mais les barres de défilement ne s'affichent jamais et ne défilent jamais. Suis-je censé faire quelque chose de spécial pour le faire défiler? Voici la fonction principale que j'utilise actuellement, pardonnez le code sale, j'ai l'intention de nettoyer la maison plus tard. :)

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

Si vous avez besoin de quelque chose d'autre, veuillez le demander dans un commentaire. Je ne suis pas sûr d'avoir besoin de fournir autre chose.

Le fichier glade est trop volumineux pour être affiché ici, mais je l'ai collé au cas où quelqu'un en aurait besoin: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=6310#a6310

Était-ce utile?

La solution

J'ai réussi à résoudre mon propre problème après avoir parlé à Axel de la liste de diffusion gtk2hs.

Les TextViews sont conçus pour pouvoir être une seule ligne de texte ou un TextView multiligne avec des barres de défilement. Si vous souhaitez des capacités de défilement, vous devez placer le TextView dans une fenêtre à défilement. J'ai résolu mon problème en plaçant mon TextView dans une fenêtre à défilement, cela fonctionne parfaitement maintenant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top