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

时间:2019-08-15 00:36:30

标签: user-interface go andlabs-ui

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

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]

问题出在哪里,如何解决。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这里:

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

您应该返回false而不是true。照原样,当您关闭窗口时,该窗口将被破坏,导致以后尝试引用该窗口时出现分段错误。

the documentation comments

  

OnClosing寄存器f在用户单击窗口的窗口时运行   关闭按钮。一次只能注册一个功能。如果f   返回true,则使用Destroy方法销毁窗口。如果f   返回false,或者如果从不调用OnClosing,则不返回窗口   销毁并保持可见。