Я новичок в Go и GTK, и у меня возникла проблема с непредсказуемым сбоем приложения при операциях GUI - обычно при добавлении строки в список. Я думаю, что я свел проблему к этому простому примеру приложения, которое переключается между добавлением и удалением строк в / из ListBox. Если вы дадите ему поработать несколько минут, он в конечном итоге выдаст SIGSEGV.
import (
"github.com/gotk3/gotk3/glib"
"github.com/gotk3/gotk3/gtk"
)
func main() {
gtk.Init(nil)
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
box, _ := gtk.ListBoxNew()
win.Add(box)
win.SetDefaultSize(200, 800)
win.ShowAll()
glib.IdleAdd(testAddRows, box)
gtk.Main()
}
func testAddRows(box *gtk.ListBox) bool {
for i:=0; i<40; i++ {
label, _ := gtk.LabelNew("SPAM")
row, _ := gtk.ListBoxRowNew()
row.Add(label)
box.Add(row)
label.Show()
row.Show()
}
glib.IdleAdd(testDeleteRows, box)
return false
}
func testDeleteRows(box *gtk.ListBox) bool {
for {
row := box.GetRowAtIndex(0)
if row == nil {
break
}
box.Remove(row)
}
glib.IdleAdd(testAddRows, box)
return false
}
Может ли кто-нибудь обнаружить проблему с этим кодом? Я использую привязки Go 1.13, GTK 3 и gotk3.