User interface 写入确认(是/否)对话框
我正在尝试使用Go编写一个“是/否”对话框,该对话框似乎没有这种类型的GUI组件:User interface 写入确认(是/否)对话框,user-interface,go,andlabs-ui,User Interface,Go,Andlabs Ui,我正在尝试使用Go编写一个“是/否”对话框,该对话框似乎没有这种类型的GUI组件: package main import "github.com/andlabs/ui" func confirm(msg string) bool { var confirmWindow = ui.NewWindow("Please confirm", 300, 100, false) var vbox = ui.NewVerticalBox() vbox.Append(ui.NewL
package main
import "github.com/andlabs/ui"
func confirm(msg string) bool {
var confirmWindow = ui.NewWindow("Please confirm", 300, 100, false)
var vbox = ui.NewVerticalBox()
vbox.Append(ui.NewLabel(msg), false)
var yesButton = ui.NewButton("Yes")
yesButton.OnClicked(func (*ui.Button) {
return true
})
var noButton = ui.NewButton("No")
noButton.OnClicked(func (*ui.Button) {
return false // <<< this should return out of the confirm function.
})
var hbox = ui.NewHorizontalBox()
hbox.Append(yesButton, false)
hbox.Append(noButton, false)
vbox.Append(hbox, false)
confirmWindow.SetChild(vbox)
confirmWindow.Show()
}
func main(){
var ret = confirm("Proceed?")
if ret {
println("Yes returned.")
} else {
println("No returned.")
}
}
使用以下main
功能也不起作用:
func main(){
println(confirm("Proceed"))
}
错误是:
(process:8577): GLib-CRITICAL **: g_ptr_array_add: assertion 'rarray' failed
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7fdeb996ae19]
runtime stack:
runtime.throw(0x4bd337, 0x2a)
/usr/local/go/src/runtime/panic.go:616 +0x81
runtime.sigpanic()
/usr/local/go/src/runtime/signal_unix.go:372 +0x28e
goroutine 1 [syscall, locked to thread]:
...
...
对通道的第二次尝试也不起作用:
package main
import ("github.com/andlabs/ui")
func confirm(msg string, ret chan bool) {
var confirmWindow = ui.NewWindow("Please confirm", 300, 100, false)
var vbox = ui.NewVerticalBox()
vbox.Append(ui.NewLabel(msg), false)
var yesButton = ui.NewButton("Yes")
yesButton.OnClicked(func (*ui.Button){
ret <- true
})
var noButton = ui.NewButton("No")
noButton.OnClicked(func (*ui.Button){
ret <- false
})
var hbox = ui.NewHorizontalBox()
hbox.Append(yesButton, false)
hbox.Append(noButton, false)
vbox.Append(hbox, false)
confirmWindow.SetChild(vbox)
confirmWindow.Show()
confirmWindow.OnClosing(func(*ui.Window)bool{
ui.Quit(); return true
})
}
func main(){
c := make(chan bool)
go confirm("Proceed?", c)
ret := <- c
if ret {println("Yes")} else {println("No")}
}
在代码中,您不是从函数
confirm
返回true或false,而是从OnClicked方法附加到yesButton和noButton的回调返回true或false
yesButton.OnClicked(func (*ui.Button) {
return true
})
var noButton = ui.NewButton("No")
noButton.OnClicked(func (*ui.Button) {
return false // <<< this should return out of the confirm function.
})
yesButton.OnClicked(func(*ui.Button){
返回真值
})
var noButton=ui.NewButton(“否”)
noButton.OnClicked(func(*ui.Button){
return false//感谢您的解释。如果您能提供一些简单的代码来澄清,这可能是最好的。通道的概念似乎并不容易。我已经尝试并在上面的问题中添加了使用通道的代码。
package main
import ("github.com/andlabs/ui")
func confirm(msg string, ret chan bool) {
var confirmWindow = ui.NewWindow("Please confirm", 300, 100, false)
var vbox = ui.NewVerticalBox()
vbox.Append(ui.NewLabel(msg), false)
var yesButton = ui.NewButton("Yes")
yesButton.OnClicked(func (*ui.Button){
ret <- true
})
var noButton = ui.NewButton("No")
noButton.OnClicked(func (*ui.Button){
ret <- false
})
var hbox = ui.NewHorizontalBox()
hbox.Append(yesButton, false)
hbox.Append(noButton, false)
vbox.Append(hbox, false)
confirmWindow.SetChild(vbox)
confirmWindow.Show()
confirmWindow.OnClosing(func(*ui.Window)bool{
ui.Quit(); return true
})
}
func main(){
c := make(chan bool)
go confirm("Proceed?", c)
ret := <- c
if ret {println("Yes")} else {println("No")}
}
(process:2407): GLib-CRITICAL **: g_ptr_array_add: assertion 'rarray' failed
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7f47561e5e19]
yesButton.OnClicked(func (*ui.Button) {
return true
})
var noButton = ui.NewButton("No")
noButton.OnClicked(func (*ui.Button) {
return false // <<< this should return out of the confirm function.
})