我正在使用下面的代码,该代码产生一个带有打开其他窗口的按钮的主窗口。我希望能够重复隐藏和显示其他窗口。关闭主窗口应退出程序:
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 :(得分:0)
这里:
otherWindow.OnClosing( func (*ui.Window) bool { otherWindow.Hide(); return true } )
您应该返回false
而不是true
。照原样,当您关闭窗口时,该窗口将被破坏,导致以后尝试引用该窗口时出现分段错误。
OnClosing寄存器f在用户单击窗口的窗口时运行 关闭按钮。一次只能注册一个功能。如果f 返回true,则使用Destroy方法销毁窗口。如果f 返回false,或者如果从不调用OnClosing,则不返回窗口 销毁并保持可见。