# \[Gtk4\] @sigatom

**URL:** https://discourse.julialang.org/t/gtk4-sigatom/133562
**Category:** General Usage
**Tags:** gtk, gtk4
**Created:** [October 30, 2025, 6:57pm UTC](https://discourse.julialang.org/t/gtk4-sigatom/133562 "2025-10-30T18:57:31Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![AdamWysokinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adamwysokinski/32/206422_2.png) [@AdamWysokinski](https://discourse.julialang.org/u/AdamWysokinski)
#### Post date: [October 30, 2025, 6:57pm UTC](https://discourse.julialang.org/t/gtk4-sigatom/133562/1 "2025-10-30T18:57:31Z")

</div>

This works in Gtk.jl:

```julia-auto
using Gtk
win = GtkWindow("test")
g = GtkGrid()
sb = GtkSpinButton(1, 10, 1)
s = GtkScale(false, 1, 10, 1)
g[1, 1] = sb
g[1, 2] = s
push!(win, g)
showall(win)
signal_connect(s, "value_changed") do widget
    Gtk.@sigatom begin
        GAccessor.value(sb, round(Int64, GAccessor.value(s)))
    end
end
signal_connect(sb, "changed") do widget
    Gtk.@sigatom begin
        GAccessor.value(s, GAccessor.value(sb))
    end
end

```

but throws a segmentation fault in Gtk4.jl

```julia-auto
using Gtk4
win = GtkWindow("test")
g = GtkGrid()
sb = GtkSpinButton(1, 10, 1)
s = GtkScale(:h, 1, 10, 1)
g[1, 1] = sb
g[1, 2] = s
push!(win, g)
signal_connect(s, "value_changed") do widget
    Gtk4.value(sb, round(Int64, Gtk4.value(s)))
end
signal_connect(sb, "changed") do widget
    Gtk4.value(s, sb.value)
end

```

since there is no @sigatom in Gtk4.jl

Is there any way to link widgets dynamically using Gtk4?

---

<div class="post-metadata">

### Author: ![AdamWysokinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adamwysokinski/32/206422_2.png) [@AdamWysokinski](https://discourse.julialang.org/u/AdamWysokinski)
#### Post date: [October 30, 2025, 7:02pm UTC](https://discourse.julialang.org/t/gtk4-sigatom/133562/2 "2025-10-30T19:02:10Z")

</div>

Oh, I’ve just got it to work 😁

```julia-auto
using Gtk4
win = GtkWindow("test")
g = GtkGrid()
sb = GtkSpinButton(1, 10, 1)
s = GtkScale(:h, 1, 10, 1)
g[1, 1] = sb
g[1, 2] = s
push!(win, g)
id1 = signal_connect(s, "value_changed") do widget
    signal_handler_block(sb, id2)
    Gtk4.value(sb, round(Int64, Gtk4.value(s)))
    signal_handler_unblock(sb, id2)
end
id2 = signal_connect(sb, "changed") do widget
    signal_handler_block(s, id1)
    Gtk4.value(s, sb.value)
    signal_handler_unblock(s, id1)
end

```

---

<div class="post-metadata">

### Author: ![jwahlstrand](https://avatars.discourse-cdn.com/v4/letter/j/bcef8e/32.png) [@jwahlstrand](https://discourse.julialang.org/u/jwahlstrand)
#### Post date: [October 30, 2025, 10:41pm UTC](https://discourse.julialang.org/t/gtk4-sigatom/133562/3 "2025-10-30T22:41:54Z")

</div>

This works too:

```julia-auto
using Gtk4
win = GtkWindow("test")
g = GtkGrid()
sb = GtkSpinButton(1, 10, 1)
s = GtkScale(:h, 1, 10, 1)
g[1, 1] = sb
g[1, 2] = s
push!(win, g)
signal_connect(s, "value_changed") do widget
    @idle_add Gtk4.value(sb, round(Int64, Gtk4.value(s)))
end
signal_connect(sb, "changed") do widget
    @idle_add Gtk4.value(s, sb.value)
end

```

---

<div class="post-metadata">

### Author: ![AdamWysokinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/adamwysokinski/32/206422_2.png) [@AdamWysokinski](https://discourse.julialang.org/u/AdamWysokinski)
#### Post date: [October 31, 2025, 7:45am UTC](https://discourse.julialang.org/t/gtk4-sigatom/133562/4 "2025-10-31T07:45:49Z")

</div>

That’s even better, particularly for a larger number of interdependent widgets. Thanks!
