我发现以下代码有效:// modified from: https://github.com/andlabs/ui/wiki/Getting-Startedpackage mainimport ("github.com/andlabs/ui")func makewinfn() { var name = ui.NewEntry() var button = ui.NewButton("Greet") var greeting = ui.NewLabel("") box := ui.NewVerticalBox() box.Append(ui.NewLabel("Enter your name:"), false) box.Append(name, false) box.Append(button, false) box.Append(greeting, false) mywindow := ui.NewWindow("MyTitle", 200, 100, false) mywindow.SetChild(box) button.OnClicked( func (*ui.Button) {greeting.SetText("Hello, " + name.Text() + "!") } ) mywindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true } ) mywindow.Show()}func main() { ui.Main(makewinfn)}但是,如果我尝试使用全局变量:package mainimport ("github.com/andlabs/ui")// keeping following as global variables: var name = ui.NewEntry()var button = ui.NewButton("Greet")var greeting = ui.NewLabel("")func makewinfn() { box := ui.NewVerticalBox() box.Append(ui.NewLabel("Enter your name:"), false) box.Append(name, false) box.Append(button, false) box.Append(greeting, false) mywindow := ui.NewWindow("MyTitle", 200, 100, false) mywindow.SetChild(box) button.OnClicked( func (*ui.Button) {greeting.SetText("Hello, " + name.Text() + "!") } ) mywindow.OnClosing( func (*ui.Window) bool { ui.Quit(); return true } ) mywindow.Show()}func main() { ui.Main(makewinfn)}这段带有全局变量的代码可以正常编译,但在运行时会产生以下错误:fatal error: unexpected signal during runtime execution[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7fecb2712e19]如何将 GUI 组件保留为全局变量?我将它们保留为全局,以便我可以从其他功能访问它们。
1 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
当您在顶层(包块)使用变量时,它们会在开始执行之前初始化main()。
并且您从github.com/andlabs/ui包中调用代码,但它ui.Main()尚未被调用,因此ui它所依赖的包和资源可能尚未初始化。
仅声明变量,但尚未为其赋值,将其留给函数makewinfn():
var name *ui.Entry
var button *ui.Button
var greeting *ui.Label
func makewinfn() {
name = ui.NewEntry()
button = ui.NewButton("Greet")
greeting = ui.NewLabel("")
box := ui.NewVerticalBox()
// ...
}
- 1 回答
- 0 关注
- 124 浏览
添加回答
举报
0/150
提交
取消