跳转到内容

Haskell/解决方案/GUI

来自维基教科书,开放世界中的开放书籍

← 返回 GUI

练习
  1. 添加一个复选框控件。它目前不需要做任何事情,只需确保它在使用行布局时出现在静态文本和按钮旁边,或者在使用列布局时出现在它们下方。文本也是复选框的一个属性。
  2. 请注意接受一个布局列表,并生成一个布局本身。使用此功能,让您的复选框出现在静态文本和按钮的左侧,静态文本和按钮在列中。
  3. 您能弄清楚单选按钮控件是如何工作的吗?使用前一个练习的布局,在复选框、静态文本和按钮下方添加一个带有两个(或更多)选项的单选按钮。使用文档!
  4. 使用boxed组合器在四个控件周围创建一个漂亮的外框,并在静态文本和按钮周围创建另一个外框。(注意:boxed组合器可能在 MacOS X 上不起作用 - 您可能会遇到无法交互的窗口小部件。这可能是 wxhaskell 中的一个错误。


1. gui- 带有复选框、行布局的函数。(替换以获得列布局)

gui :: IO ()
gui = do
  f <- frame [ text := "Hello World!" ]
  st <- staticText f [ text := "Hello StaticText!" ]
  b <- button f [ text := "Hello Button!" ]
  cb <- checkBox f [ text :=  "Hello Checkbox!" ]
  set f [ layout := row 5 [ widget st, widget b, widget cb ] ]

2. gui- 带有嵌套布局组合器的函数。

gui :: IO ()
gui = do
  f <- frame [ text := "Hello World!" ]
  st <- staticText f [ text := "Hello StaticText!" ]
  b <- button f [ text := "Hello Button!" ]
  cb <- checkBox f [ text := "Hello Checkbox!" ]
  set f [ layout := row 5
          [ widget cb
          , column 25
            [ widget st
            , widget b
            ]
          ]
        ]

3. gui- 带有单选按钮控件的函数。的文档radioBox函数指出创建一个新的单选按钮组,带有初始方向和标签列表。如文档所示Orientation,它可以是HorizontalVertical。我正在使用Vertical这里,但它并不重要。

gui :: IO ()
gui = do
  f <- frame [ text := "Hello World!" ]
  st <- staticText f [ text := "Hello StaticText!" ]
  b <- button f [ text := "Hello Button!" ]
  cb <- checkBox f [ text :=  "Hello Checkbox!" ]
  rb <- radioBox f Vertical ["Hello Option 1!", "Hello Option 2!" ] [ text := "Hello Radiobox!" ]
  set f [ layout := column 5
          [ row 5
            [ widget cb
            , column 25
              [ widget st
              , widget b
              ]
            ]
          , widget rb
          ]
        ]
  return ()

4. gui- 用于创建屏幕截图中所示的完整布局的函数

最终结果(winxp)
gui :: IO ()
gui = do
  f <- frame [ text := "Hello World!" ]
  st <- staticText f [ text := "Hello StaticText!" ]
  b <- button f [ text := "Hello Button!" ]
  cb <- checkBox f [ text := "Hello Checkbox!" ]
  rb <- radioBox f Vertical ["Hello Option 1!", "Hello Option 2!" ] [ text := "Hello Radiobox!" ]
  set f [ layout := boxed "Hello Box 1" $ column 5
          [ row 5
            [ widget cb
            , boxed "Hello Box 2" $ column 25
              [ widget st
              , widget b
              ]
            ]
          , widget rb
          ]
        ]
  return ()
华夏公益教科书