在改变Gtk2Hs中元素的属性时,有人可以指出我正确的方向。
例如,如何更改DrawingArea的背景颜色?
答案 0 :(得分:3)
修改窗口小部件的样式有多种方法。例如,要修改背景样式,可以使用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*
函数族(例如{{3})来执行此操作})。这是一个例子:
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