在awesome wm的container widget中切换两种颜色

我创建了一个类似这样的wibox.container.background

local w = wibox.widget({
        {
          id = "texte",
          text = "mon texte",
          widget = wibox.widget.textbox
       },
       bg = beautiful.bg_normal,
       widget = wibox.container.background
})

现在我想使用以下代码在两种背景颜色之间切换:

w.bg = w.bg == beautiful.bg_normal and beautiful.bg_focus or beautiful.bg_normal

但是这并不起作用。似乎w.bg指的是一个固定的图案,而不是一个简单的十六进制颜色字符串。

我是否指向了正确的bg变量?

点赞
用户436275
用户436275

我建议您保留自己的变量 local is_focus = true 并使用它来更新背景。

发生的是,您指定的背景 "字符串" 经过 gears.color 处理后,会被转换为一个 cairo 图案。这实际上就是绘制时使用的东西。您也可以直接传入一个 cairo 图案,避免通过 gears.color 进行 "循环"。

我提出的解决方案示例:

local w = wibox.widget({
        {
          id = "texte",
          text = "mon texte",
          widget = wibox.widget.textbox
       },
       bg = beautiful.bg_normal,
       widget = wibox.container.background
})
local is_focused = false
local function switch_background()
    is_focused = not is_focused
    w.bg = is_focused and beautiful.bg_focus or beautiful.bg_normal
end
2020-07-08 13:56:48