SliderGrid

SliderGrid <: Block

A grid of horizontal Slider s, where each slider has one name label on the left, and a value label on the right.

Each NamedTuple you pass specifies one Slider . You always have to pass range and label , and optionally a format for the value label. Beyond that, you can set any keyword that Slider takes, such as startvalue .

The format keyword can be a String with Formatting.jl style, such as "{:.2f}Hz", or a function.

Constructors

SliderGrid(fig_or_scene, nts::NamedTuple...; kwargs...)              

Examples

sg = SliderGrid(fig[1, 1],
    (label = "Amplitude", range = 0:0.1:10, startvalue = 5),
    (label = "Frequency", range = 0:0.5:50, format = "{:.1f}Hz", startvalue = 10),
    (label = "Phase", range = 0:0.01:2pi,
        format = x -> string(round(x/pi, digits = 2), "π"))
)              

Working with slider values:

on(sg.sliders[1].value) do val
    # do something with `val`
end              

Attributes

SliderGrid attributes :

  • value_column_width : The width of the value label column. If automatic , the width is determined by sampling a few values from the slider ranges and picking the largest label size found. Default: automatic

Layout attributes :

  • alignmode : The align mode of the block in its parent GridLayout. Default: Inside()

  • halign : The horizontal alignment of the block in its suggested bounding box. Default: :center

  • height : The height setting of the block. Default: Auto()

  • tellheight : Controls if the parent layout can adjust to this block's height Default: true

  • tellwidth : Controls if the parent layout can adjust to this block's width Default: true

  • valign : The vertical alignment of the block in its suggested bounding box. Default: :center

  • width : The width setting of the block. Default: Auto()

The column with the value labels is automatically set to a fixed width, so that the layout doesn't jitter when sliders are dragged and the value labels change their widths. This width is chosen by setting each slider to a few values and recording the maximum label width. Alternatively, you can set the width manually with attribute value_column_width .

using GLMakie

fig = Figure()

ax = Axis(fig[1, 1])

sg = SliderGrid(
    fig[1, 2],
    (label = "Voltage", range = 0:0.1:10, format = "{:.1f}V", startvalue = 5.3),
    (label = "Current", range = 0:0.1:20, format = "{:.1f}A", startvalue = 10.2),
    (label = "Resistance", range = 0:0.1:30, format = "{:.1f}Ω", startvalue = 15.9),
    width = 350,
    tellheight = false)

sliderobservables = [s.value for s in sg.sliders]
bars = lift(sliderobservables...) do slvalues...
    [slvalues...]
end

barplot!(ax, bars, color = [:yellow, :orange, :red])
ylims!(ax, 0, 30)

fig