1

WxHaskell と gtk2hs をインストールした後、どちらを選択するかを決めるために両方をいじっています。WxHaskell については、 haskell.org の WxHaskellのドキュメントに取り組んでいます。次の最初の例は、「クイック スタート」セクションからのものです。

 -- 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 では、1 秒目以降に main を実行すると、高さが正しくなります。GHCi セッションを閉じて再起動すると、 aagin は「フラット」になり、 main への最初の呼び出しではボタンが含まれませんが、後続の呼び出しでは修正されます。コードをコンパイルして GHCi の外で実行すると、ウィンドウは常にフラットになります。

これはバグですか、それともチュートリアルが古くなっているのでしょうか、それとも何か不足していますか?

4

2 に答える 2

3

上記のコメントから、これはおそらくあなたが望むものではありませんが、参考までに...

サイズを設定する代わりに、最小サイズを設定できます。

set f [layout := minsize (sz 300 200) $ widget quit]
于 2013-02-22T11:59:16.873 に答える
1

これは、C++ で wxWidgets を使用するのと同じ方法で、つまりレイアウトで行うことができます。

たとえば、ボックスサイザーを使用できます。

module Main where

import Data.Bits

import Graphics.UI.WX
import Graphics.UI.WXCore.WxcDefs
import Graphics.UI.WXCore.Frame
import Graphics.UI.WXCore.WxcClassesAL
import Graphics.UI.WXCore.WxcClassesMZ
import Graphics.UI.WXCore.WxcTypes

main :: IO ()
main = start simple

simple :: IO ()
simple = do
    hbox <- boxSizerCreate wxHORIZONTAL
    window <- frame [text := "Title"] 
    quitButton <- button window [text := "Quit", on command := close window]
    exitButton <- button window [text := "Exit", on command := close window]
    windowSetSizer window hbox
    sizerAddWindow hbox exitButton 1 (wxEXPAND .|. wxALL) 5 ptrNull
    sizerAddWindow hbox quitButton 1 (wxEXPAND .|. wxALL) 5 ptrNull
    frameCenter window
    return ()
于 2014-04-19T02:32:39.793 に答える