haskell 如何使用gi-gtk修改条目中的背景色(和其他颜色)

6ju8rftf  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(112)

我想用gi-gtk创建一个条目,如果条目中提供的文本不是预期的格式,则修改backgroundcolor。
我试图在gi-gtk entry中查找一个方法,如'setEntryColor',但没有找到。什么是正确的函数来做我想做的事情?

ryevplcw

ryevplcw1#

我设法通过使用widgetGetStyleContext、styleContextAddClass和styleContextRemoveClass修改了入口小部件的类。
然后,如果所有字符都是数字,我可以通过添加或删除“warning”或“error”类来修改条目的外观。

import           Data.Char
import qualified Data.GI.Gtk                                       as Gtk
import qualified Data.Text                                         as T

main :: IO ()
main = do
    Gtk.init Nothing
    window <- Gtk.windowNew Gtk.WindowTypeToplevel
    Gtk.set window [Gtk.windowTitle Gtk.:= (T.pack $ "test")]

    vbox <- Gtk.vBoxNew False 5
    Gtk.containerAdd window vbox
    e1 <- Gtk.entryNew
    e2 <- Gtk.entryNew

    Gtk.boxPackStart vbox e1 True True 0
    Gtk.boxPackStart vbox e2 True True 0

    Gtk.onEntryActivate e1 $ do
        f <- Gtk.entryGetText e1
        case all isDigit (T.unpack f) of
            False -> do
                ctx <- Gtk.widgetGetStyleContext e1
                Gtk.styleContextAddClass ctx (T.pack "warning")
            True  -> do
                ctx <- Gtk.widgetGetStyleContext e1
                Gtk.styleContextRemoveClass ctx (T.pack "warning")

    Gtk.widgetShowAll window
    Gtk.onWidgetDestroy window Gtk.mainQuit
    Gtk.main

就是这样

xzv2uavs

xzv2uavs2#

您发布的链接已包含答案。Gtk.Entry有css节点,你必须使用css来改变Gtk.Entry的文本颜色或任何其他特征。为此,必须使用Gtk.CssProvider
编辑:一个小Python的故事:首先创建一个包含css类的test.css文件,其中包含您想要进行的更改,然后:

self.cssProvider = Gtk.CssProvider()    
self.file = Gio.File.new_for_path('test.css')        
self.cssProvider.load_from_file(self.file)

self.entry.get_style_context().add_provider(self.cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
self.entry.add_css_class('red-text-image')

相关问题