2011-08-02 67 views
3

我有一個帶有三個窗口小部件和一個按鈕的窗口。我使用該按鈕以編程方式刪除其中一個小部件。問題在於,主窗口在被刪除後不會改變其大小以適應新佈局。gtk2hs:刪除窗口小部件後請求重新計算窗口大小

我可以想象,我需要發送一些信號或事件的主循環,這將導致重新計算,但我一直無法找到這樣的功能。

下面是一些示例代碼:

import Graphics.UI.Gtk 
import Data.IORef 
import qualified Graphics.UI.Gtk as G hiding (Point) 
import qualified Graphics.UI.Gtk.Gdk.EventM as E 
import qualified Graphics.UI.Gtk.Abstract.Widget as W 
import qualified Graphics.Rendering.Cairo as C 


makeEntry :: String -> IO Entry 
makeEntry str = do e <- entryNew 
        entrySetText e str 
        return e 

main :: IO() 
main = do 
    initGUI 
    window <- windowNew 
    box <- vBoxNew False 0 
    G.on window G.keyPressEvent $ E.tryEvent $ do 
    "Escape" <- E.eventKeyName 
    C.liftIO $ G.widgetDestroy window 

    set window [ containerChild := box ] 

    e1 <- makeEntry "e1" 
    boxPackStart box e1 PackNatural 0 

    e2 <- makeEntry "e2" 
    boxPackStart box e2 PackNatural 0 

    e3 <- makeEntry "e3" 
    boxPackStart box e3 PackNatural 0 

    button <- buttonNew 
    set button [ buttonLabel := "Remove" ] 
    boxPackStart box button PackNatural 0 

    onClicked button (containerRemove box e2) 
    onDestroy window mainQuit 
    widgetShowAll window 
    mainGUI 

回答

3

你可以問問你的頂層窗口,它希望有多大是,並不會是很大的:

refresh window = do 
    Requisition w h <- widgetSizeRequest window 
    windowResize window w h 

要使用此,將其粘在按鈕的喀噠聲處理器中:

onClicked button (containerRemove box e2 >> refresh window) 
+0

謝謝,那個作品:-) –