【发布时间】:2013-02-21 12:06:48
【问题描述】:
在安装了 WxHaskell 和 gtk2hs 之后,我正在玩弄它们中的哪一个。对于 WxHaskell,我正在阅读WxHaskell at haskell.org 的文档。以下第一个示例来自 “快速入门” 部分:
-- Copied from www.haskell.org/haskellwiki/WxHaskell/Quick_start
module Main where
import Graphics.UI.WX
main :: IO ()
main
= start hello
hello :: IO ()
hello
= do f <- frame [text := "Hello!"]
quit <- button f [text := "Quit", on command := close f]
set f [layout := widget quit]
禁止
Debug: wxColour::Set - couldn't set to colour string 'MEDIUM GREY'
以及针对不同图像文件格式的类似如下的行
Debug: Adding duplicate image handler for 'PNG file'
代码编译良好并加载到 GHCi 中。但是,运行时出现的窗口 高度为零,只有窗口的顶部栏可见,无需手动调整窗口大小以包含按钮。这在编译和加载到 GHCi 时都会发生。在 GHCi 中,当执行 main 秒和任何后续时间时,高度将是正确的。如果我关闭并重新启动 GHCi 会话,它将再次“平坦”,并且在第一次调用 main 时不包括按钮,但在任何后续调用中都会更正。当编译代码并在 GHCi 之外运行时,窗口总是平坦的。
这是一个错误还是教程已过时或我遗漏了什么?
【问题讨论】:
-
wxHaskell 和 GHCi 存在已知问题:haskell.org/haskellwiki/WxHaskell/FAQ
-
或者你的意思是窗口总是太小?如果是这样,您可以添加
minsize布局。 -
在 GHCi 和使用 GHC 编译代码时都会发生这种情况。我期望获得与链接示例显示中的屏幕截图相同的行为。添加显式大小,例如。使用 clientSize := sz 150 100 窗口的大小会相应地调整,但是对于以后的实际代码来说,隐式地调整 GUI 元素的大小会很好。
-
你可以试试
windowReLayout...不过我对wxWindows不是很熟悉:hackage.haskell.org/packages/archive/wxcore/latest/doc/html/…