我正在尝试构建一个简单的用户界面作为学习wxHaskell和Reactive Banana的练习,但是我试图解决一个看似简单的问题。具体来说,我想在标签的文本更新时调整窗口大小以适应标签,以便它始终适合文本。我尝试使用windowReLayoutMinimal
完成此操作,但这意外地导致窗口在文本溢出时无法调整大小,并且在手动调整大小时(即拉伸它)时窗口在其原始大小和新大小之间选通把手放在角落里)。据我所知,StaticText
项目的大小在文本更改时无法更新。有没有办法强制项目重新计算其最小尺寸?
我的代码如下所示:
{-# LANGUAGE ScopedTypeVariables #-}
import Graphics.UI.WX hiding (Event)
import Reactive.Banana
import Reactive.Banana.WX
main = start $ do
mainWindow <- frame [text := "Test"]
inputText <- textEntry mainWindow []
outputText <- staticText mainWindow []
set mainWindow [layout :=
margin 10 $
grid 10 10 [
[widget inputText, fill $ valignCenter $ widget outputText]
]
]
let
networkDescription :: forall t . Frameworks t => Moment t ()
networkDescription = do
inputTextEvStream <- eventText inputText
let
currentInputText = stepper "" inputTextEvStream
sink outputText [text :== currentInputText]
reactimate $ windowReLayoutMinimal mainWindow <$ inputTextEvStream
network <- compile networkDescription
actuate network