我写了一个简单的时钟程序,在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
我无法弄清楚这里发生了什么。 我将不胜感激任何帮助