有人可以请我在正确的方向,当它涉及到改变性质的元素在Gtk2Hs.

例如,如何变化的背景色的一个DrawingArea?

有帮助吗?

解决方案

有各种不同的方法修改的一个小部件的风格。例如修改背景,可以使用的风格 widgetModifyBg (对应的C功能 gtk_widget_modify_bg()).原则上,如果你改变风格,用于一个国家(例如StateNormal)然后你也应该改变它的其他人。

Y会建议你描述一下你想要的样式在一个RC文件,然后加载的文件自己的应用,但似乎职能喜欢 gtk_rc_parse() 不能在gtk2hs.

这里有一个例子:

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

如果你需要定制的绘图基础上的一个小部件的风格,您可以使用 widgetGetState, , widgetStyle 酒店和本 styleGet* 家庭的功能(例如: styleGetText).这里有一个例子:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top