Подключение к сигналу виджета, 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)

затем нажатие на панель показывает ошибку

попытка вызвать нулевое значение (поле 'set_value')

Как заставить это работать?


person Sap Green    schedule 29.03.2020    source источник
comment
Не уверен, но может быть w:set_value   -  person macroland    schedule 29.03.2020
comment
ты за пробуй, я все понял, проверь мой ответ на вопрос @macroland   -  person Sap Green    schedule 29.03.2020


Ответы (1)


Оказывается, w - это "родительский" виджет, который содержит виджет индикатора выполнения. Так что я должен был сделать это таким образом

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

поэтому в основном я извлекаю таблицу всех дочерних виджетов, а затем использую [1] для ссылки на первый виджет в таблице, после чего присваиваю значение его свойству.

person Sap Green    schedule 29.03.2020