连接到小部件的信号,button::press

我想创建一个简单的小部件,它是一个进度条,当我们用左键单击时,它的值设置为1。

   local myFirstWidget = wibox.widget {
        {
            value = 0.5,
            color = "#ff0000",
            widget = wibox.widget.progressbar,
            width = 100,
            forced_height = 20,
            shape = gears.shape.rounded_bar,
            border_width = 2,
            border_color = beautiful.border_color,
            ticks = true,
            clip = true,
            margins = {top = 5, bottom = 5},
            paddings = 2
        },
        layout = wibox.layout.fixed.horizontal
    }

    myFirstWidget:connect_signal("button::press",
                                 function(w, _, _, btn) w.value = 1 end)

当我按下进度条时,实际上什么都没有发生。如果我使用

w.set_value(1)

那么点击进度条会显示一个错误

attempt to call a nil value (field 'set_value')

我该怎么使它工作?

点赞
用户12646510
用户12646510

结果表明 w 是包含进度条小部件的"父"小部件。所以我必须这样做:

myFirstWidget:connect_signal("button::press", function(w)
    local children = w:get_all_children()
    children[1].value = 1;
end)

所以基本上我检索了所有子小部件的表,然后使用 [1] 引用表中的第一个小部件,之后我为其属性分配了一个值。

2020-03-29 15:45:05