我正在尝试构建一个简单的 UI 作为学习 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