labelSetText在timeoutAdd处理程序中执行时表现很奇怪

时间:2015-04-13 07:55:06

标签: haskell gtk2hs

我写了一个简单的时钟程序,在winxp下工作正常。在linux下运行时,它表现得很奇怪。程序绘制标签,文本设置为“00:00”,然后使用相同的文本每秒更新一次。

要运行程序,我在命令行中指定字体大小。如果我把它设置得很小(我的屏幕为200.0或更低,可能与你的不同),它可以正常工作。如果我将它设置得太大而且文本不适合屏幕(在我的情况下为500.0),它也可以正常工作。然而,当我选择中间的大小(例如,300.0或400.0)时,它显示“00:00”,但是一旦updateClock设置文本,它在屏幕上变为“:00”(它没有向左移动,只是两个前导零用空格代替)

以下是演示此问题的简化代码:

import System.Environment
import System.Time
import System.Locale
import Data.Time
import Graphics.Rendering.Cairo
import Graphics.UI.Gtk hiding (fill)
import Graphics.UI.Gtk.Gdk.EventM

parseArgs [str] = case reads str::[(Double, String)] of
  [(number, "")] -> Just number
  _ -> Nothing 

parseArgs _ = Nothing

updateClock labl = do
  labelSetText labl "00:00"
  return True


main = do
  args <- getArgs
  case (parseArgs args) of
    Just size -> 
      showGui size
    _ -> putStrLn "\nUsage: test fontSize"

  where
    showGui size = do
      initGUI
      window <- windowNew
      onDestroy window mainQuit

      window `on` keyPressEvent $ tryEvent $ do
        "Escape" <- eventKeyName
        liftIO mainQuit

      labl <- labelNew Nothing
      fd <- fontDescriptionNew

      containerAdd window labl

      windowFullscreen window

      fontDescriptionSetSize fd size
      widgetModifyFont labl $ Just fd

      timeoutAdd (updateClock labl >> return True) 1000

      widgetShowAll window
      mainGUI

我使用libghc-gtk-dev 0.12.4-3,

ghc 7.6.3

和libgtk2.0-0 2.24.23-0ubuntu1.2。

我用ghc编译--make --threaded

我无法弄清楚这里发生了什么。 我将不胜感激任何帮助

0 个答案:

没有答案