为了账号安全,请及时绑定邮箱和手机立即绑定

无法将 GUI 变量保持为全局变量

无法将 GUI 变量保持为全局变量

Go
慕哥9229398 2023-07-10 17:38:15
我发现以下代码有效:// 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()

    // ...

}


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信