Haskell gtkhs中小部件类的自定义实现
Gtk2hs具有实现小部件类的各种小部件数据类型。是否可以编写具有相同功能的自定义数据类型 假设我想要一个小部件来显示和运行这样的Lua代码Haskell gtkhs中小部件类的自定义实现,haskell,gtk,gtk2hs,Haskell,Gtk,Gtk2hs,Gtk2hs具有实现小部件类的各种小部件数据类型。是否可以编写具有相同功能的自定义数据类型 假设我想要一个小部件来显示和运行这样的Lua代码 data LuaWidget = LuaWidget { text :: TextView, package :: HBox } deriving Eq instance Widget LuaWidget where .... 在Haskell级别上可能吗?不可能在gtk中使用Haskell创建新的小部件“类” 您可以做的是为现有小部件类型提供自
data LuaWidget = LuaWidget { text :: TextView, package :: HBox } deriving Eq
instance Widget LuaWidget where
....
在Haskell级别上可能吗?不可能在gtk中使用Haskell创建新的小部件“类” 您可以做的是为现有小部件类型提供自定义属性。例如,在包
plot gtk
中,将自定义数据字段(System.Glib.GObject
)添加到绘图区域
小部件:
import System.Glib.GObject
import Graphics.UI.Gtk
-- | create a new 'Figure' plot
plotNew :: FigureHandle -> IO DrawingArea
plotNew f = do
canvas <- drawingAreaNew
set canvas [maybeFigure := (Just f)]
_ <- on canvas exposeEvent $ tryEvent $ liftIO $ do
s <- widgetGetSize canvas
drw <- widgetGetDrawWindow canvas
fig <- get canvas figure
renderWithDrawable drw (renderFigureState fig s)
return canvas
-- | the figure attribute
figure :: Attr DrawingArea FigureState
figure = newAttr getFigure setFigure
where getFigure o = do
Just f <- get o maybeFigure
readMVar f
setFigure o f = set o [maybeFigure :~> (\(Just h) -> do
modifyMVar_ h (\_ -> return f)
return $ Just h)]
maybeFigure :: Attr DrawingArea (Maybe FigureHandle)
maybeFigure = unsafePerformIO $ objectCreateAttribute
{-# NOINLINE maybeFigure #-}
import System.Glib.GObject
导入Graphics.UI.Gtk
--|创建一个新的“图形”图
plotNew::FigureHandle->IO绘图区域
plotNew f=do
帆布