首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Gtk2Hs中更改DrawingArea的属性

如何在Gtk2Hs中更改DrawingArea的属性
EN

Stack Overflow用户
提问于 2009-12-14 02:01:47
回答 1查看 947关注 0票数 1

当涉及到在Gtk2Hs中更改元素的属性时,有人能给我指出正确的方向吗?

例如,如何更改DrawingArea的背景色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-14 07:31:02

有多种方法可以修改小部件的样式。例如,要修改背景样式,您可以使用widgetModifyBg (对应于C函数gtk_widget_modify_bg())。原则上,如果您更改了一个状态(例如StateNormal)的样式,那么您也应该为其他状态更改它。

Y建议你在RC文件中描述你想要的样式,然后从你的应用程序中加载该文件,但看起来像gtk_rc_parse()这样的函数在gtk2hs中并没有绑定。

下面是一个例子:

代码语言:javascript
复制
import Graphics.UI.Gtk

main = do
    initGUI
    window <- windowNew
    window `onDestroy` mainQuit
    drawingArea <- drawingAreaNew
    window `containerAdd` drawingArea
    widgetModifyBg drawingArea StateNormal (Color 0xffff 0 0)
    widgetShowAll window
    mainGUI

如果您需要根据小部件的样式进行自定义绘图,您可以使用widgetGetStatewidgetStyle属性和styleGet*系列函数(例如styleGetText)来完成。下面是一个这样的例子:

代码语言:javascript
复制
import Graphics.Rendering.Cairo
import Graphics.UI.Gtk hiding (fill)
import Graphics.UI.Gtk.Gdk.Events (Event(Expose))

expose widget rect = do
    state <- widgetGetState widget
    style <- widget `get` widgetStyle
    (Color red green blue) <- styleGetText style state
    drawWindow <- widgetGetDrawWindow widget

    renderWithDrawable drawWindow $ do
        moveTo 50 50
        setFontSize 20
        setSourceRGB (fromIntegral red / 0xffff)
                     (fromIntegral green / 0xffff)
                     (fromIntegral blue / 0xffff)
        showText "O HAI"
        fill

    return False

main = do
    initGUI
    window <- windowNew
    window `onDestroy` mainQuit
    drawingArea <- drawingAreaNew
    drawingArea `onExpose` \(Expose sent area region count) ->
        expose drawingArea area
    window `containerAdd` drawingArea
    widgetShowAll window
    mainGUI
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1897197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档