当涉及到在Gtk2Hs中更改元素的属性时,有人能给我指出正确的方向吗?
例如,如何更改DrawingArea的背景色?
发布于 2009-12-14 07:31:02
有多种方法可以修改小部件的样式。例如,要修改背景样式,您可以使用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
mainGUIhttps://stackoverflow.com/questions/1897197
复制相似问题