lxn / walk

A Windows GUI toolkit for the Go Programming Language
Other
6.78k stars 886 forks source link

How to dynamically update widgets #788

Open kayon opened 2 years ago

kayon commented 2 years ago
var win *walk.MainWindow
var view *walk. ScrollView

MainWindow{
    AssignTo: &win,
    ...
    Children: []Widget{
        HSplitter{
            Children: []Widget{
                PushButton{
                    OnClicked: func() {
                        loading := newLoading(win)
                        go update()
                        loading.Run()
                    },
                },
                ...
            }
        },
        ScrollView{
            AssignTo: &view,
        },
        ...
}

func update(loading *walk.Dialog) {
    defer loading.Close(0)

    // fetch data
    ...

    view.Children().Clear()
    text1, _ := walk.NewTextLabel(view)
    ...
    btn1, _ := walk.NewPushButton(view)
}

func newLoading(owner walk.Form) *walk.Dialog {
    var dialog *walk.Dialog

    Dialog{
    AssignTo:  &dialog,
        ...
    }.Create(owner)
    return dialog
}

It doesn't work in goroutine