代码之家  ›  专栏  ›  技术社区  ›  rnso

隐藏后显示窗口将删除所有内容

  •  0
  • rnso  · 技术社区  · 6 年前

    我使用下面的代码生成一个带有按钮的主窗口来打开其他窗口。我希望能够反复隐藏和显示其他窗口。关闭主窗口应退出程序:

    package main
    import ("github.com/andlabs/ui")
    
    func main() {
        ui.Main(makeAllWins)
    }
    
    var mainWindow *ui.Window
    var otherWindow *ui.Window
    
    func makeAllWins(){
        makeMainWin()
        makeOtherWin()
        mainWindow.Show()
    }
    func makeMainWin(){
        var otherButton = ui.NewButton("Other module")
        otherButton.OnClicked( func (*ui.Button) { otherWindow.Show() })
        var box = ui.NewVerticalBox()
        box.Append(ui.NewLabel("Select module"), false)
        box.Append(otherButton, false)
        mainWindow = ui.NewWindow("Hello", 200, 100, false)
        mainWindow.SetChild(box)
        mainWindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true   } )
    }
    func makeOtherWin(){
        var box = ui.NewVerticalBox()
        box.Append(ui.NewLabel("label1"), false)
        box.Append(ui.NewLabel("label2"), false)
        box.Append(ui.NewLabel("label3"), false)
        otherWindow = ui.NewWindow("Other", 200, 100, false)
        otherWindow.SetChild(box)
        otherWindow.OnClosing( func (*ui.Window) bool { otherWindow.Hide(); return true } )  // I THINK PROBLEM IS IN THIS LINE
    }
    

    然而,当我隐藏一次后显示另一个窗口时,所有标签都消失了。重复时,程序崩溃,出现以下错误:

    fatal error: unexpected signal during runtime execution
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x67fb0a pc=0x67fb0a]
    

    问题在哪里?如何解决。谢谢你的帮助。

    0 回复  |  直到 6 年前
        1
  •  0
  •   rnso    6 年前

    在这里:

    otherWindow.OnClosing( func (*ui.Window) bool { otherWindow.Hide(); return true } )
    

    你应该回来了 false 而不是 true .实际上,当你关闭窗口时,它会被破坏,导致你以后试图引用它时出现分段错误。

    the documentation comments :

    OnClosing在用户单击窗口的 关闭按钮。一次只能注册一个函数。如果f 返回true,则使用Destroy方法销毁窗口。如果f 返回false,或者如果从未调用OnClosing,则窗口不会被调用 被摧毁并保持可见。