前提・実現したいこと
HaskellでGUIプログラミングを勉強しています。
haskell-giライブラリを使用しています。
公式サイトのHelloWorldプログラムにある、ラベルとボタンを配置したプログラムに修正を加え、テキストボックス(TextView)を追加することができました。
ボタンを押すとテキストボックスの値をラベルに書き換えるようにしたいのですが、テキストボックスから値を取り出すことができません。
公式サイトを見ていると「textViewGetBuffer」というメソッドで取り出せそうですが、使い方(書き方)がわかりません。
発生している問題・エラーメッセージ
想像で書いてみますが、当然のごとくエラーとなります。
[apo@myhostname my-project]$ stack build my-project> configure (lib + exe) Configuring my-project-0.1.0.0... my-project> build (lib + exe) Preprocessing library for my-project-0.1.0.0.. Building library for my-project-0.1.0.0.. [3 of 3] Compiling Hello /home/apo/doc/project/make/haskell/ClickMe/my-project/src/Hello.hs:26:39: error: ~ Couldn't match expected type ‘[AttrOp (m0 Gtk.TextBuffer) 'Data.GI.Base.Attributes.AttrConstruct]’ with actual type ‘Gtk.TextView’ ~ In the second argument of ‘new’, namely ‘textview’ In a stmt of a 'do' block: buffer <- new Gtk.textViewGetBuffer textview In the expression: do Gtk.init Nothing win <- new Gtk.Window [#title := "Introduction"] on win #destroy Gtk.mainQuit #resize win 640 480 .... | 26 | buffer <- new Gtk.textViewGetBuffer textview | ^^^^^^^^ /home/apo/doc/project/make/haskell/ClickMe/my-project/src/Hello.hs:44:29: error: ~ Couldn't match type ‘Data.Text.Internal.Text’ with ‘[Char]’ arising from a use of ‘:=’ ~ In the expression: #label := (show buffer) In the second argument of ‘set’, namely ‘[#label := (show buffer)]’ In the third argument of ‘on’, namely ‘(set msg [#label := (show buffer)])’ | 44 | on btn #clicked (set msg [#label := (show buffer)]) | ^^^^^^^^^^^^^^^^^^^^^^^ -- While building package my-project-0.1.0.0 (scroll up to its section to see the error) using: /home/apo/.stack/setup-exe-cache/x86_64-linux-tinfo6/Cabal-simple_mPHDZzAJ_3.0.1.0_ghc-8.8.4 --builddir=.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.0.1.0 build lib:my-project exe:my-project-exe --ghc-options " -fdiagnostics-color=always" Process exited with code: ExitFailure 1
該当のソースコード
haskell
1{-# LANGUAGE OverloadedStrings, OverloadedLabels #-} 2 3module Hello (hello) where 4 5import qualified GI.Gtk as Gtk 6import Data.GI.Base 7-- import Graphics.UI.Gtk 8 9hello :: IO () 10hello = do 11 Gtk.init Nothing 12 13 win <- new Gtk.Window [ #title := "Introduction" ] 14 on win #destroy Gtk.mainQuit 15 #resize win 640 480 16 17 box <- new Gtk.Box [ #orientation := Gtk.OrientationVertical] 18 #add win box 19 20 msg <- new Gtk.Label [#label := "Hello"] 21 #add box msg 22 23 textview <- new Gtk.TextView [] 24 #add box textview 25 26 buffer <- new Gtk.textViewGetBuffer textview 27 28 btn <- new Gtk.Button [#label := "Click me!"] 29 #add box btn 30 on btn #clicked (set msg [#label := (show buffer)]) 31 32 #showAll win 33 34 Gtk.main
試したこと
「haskell-gi TextView textViewGetBuffer」などで検索してみましたが、参考になるサイトは見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
OS:ホスト Windows10
ゲスト ArchLinux(VirtualBox)
stack: Version 2.5.1
LTS: lts-16.21
全コード
https://github.com/ringo-apo/haskell-gi-textview
ご教示よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/11 13:18