문제

GTK2HS에서 요소의 속성을 변경하는 데있어 누군가가 올바른 방향으로 나를 가리킬 수 있습니까?

예를 들어, 도로 영역의 배경색을 어떻게 변경합니까?

도움이 되었습니까?

해결책

위젯의 스타일을 수정하는 다양한 방법이 있습니다. 예를 들어 사용할 수있는 배경 스타일을 수정하려면 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