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