Подключаясь к сигналу виджета, кнопка :: нажмите - PullRequest
0 голосов
/ 29 марта 2020

Я хочу создать простой виджет, который представляет собой индикатор выполнения, значение которого устанавливается равным 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')

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

1 Ответ

0 голосов
/ 29 марта 2020

Оказывается, что w является «родительским» виджетом, который содержит виджет прогрессбара. Поэтому мне пришлось сделать это следующим образом

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

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

...