Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface 写入确认(是/否)对话框_User Interface_Go_Andlabs Ui - Fatal编程技术网

User interface 写入确认(是/否)对话框

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

我正在尝试使用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.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. 
})