2

我写了一个简单的时钟程序,在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 编译

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

4

0 回答 0