我發(fā)現(xiàn)以下代碼有效:// 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個贊
當您在頂層(包塊)使用變量時,它們會在開始執(zhí)行之前初始化main()。
并且您從github.com/andlabs/ui包中調用代碼,但它ui.Main()尚未被調用,因此ui它所依賴的包和資源可能尚未初始化。
僅聲明變量,但尚未為其賦值,將其留給函數(shù)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 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消