是否可以绘制容器并在gtk2hs中显示组件?

时间:2011-02-26 13:11:15

标签: haskell gtk gtk2hs

我希望在背景上绘制(如矩形等),然后让它在其上面渲染组件。组件将基于我绘制的内容。有没有办法做到这一点?

这是一个概念的例子。这只显示矩形。所以......只需要一些方法告诉它去渲染组件。

{-# LANGUAGE PackageImports #-}

import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import "mtl" Control.Monad.Trans(liftIO)

main = do
  initGUI
  window <- windowNew
  window `onDestroy` mainQuit
  windowSetDefaultSize window 800 600
  windowSetPosition window WinPosCenter

  table <- tableNew 3 3 False
  button <- buttonNewWithLabel "Test Button"
  tableAttachDefaults table button 1 2 1 2
  containerAdd window table
  table `on` exposeEvent $ update
  widgetShowAll table

  widgetShowAll window
  mainGUI

update = do
  win <- eventWindow
  liftIO $ do
    gc <- gcNew win
    drawRectangle win gc False 10 10 90 90
  return True

1 个答案:

答案 0 :(得分:1)

这对gtk2hs并不特别。根据{{​​3}},您需要在更新处理程序中return False,以便之后也调用其他处理程序。

在您的示例中更改此按钮时,该按钮将覆盖整个窗口,因此隐藏了矩形。但是,例如,使用tableSetHomogeneous table True可以获得所需的效果。