我得到了简单的桌面应用程序在Go上用这个lib写的:github.com/ProtonMail/ui。主窗口的图如下:
err := ui.Main(func() {
window := ui.NewWindow("Chat", 500, 500, false)
input := ui.NewEntry()
send := ui.NewButton("Send")
output := ui.NewMultilineNonWrappingEntry()
output.SetReadOnly(true)
mainBox := ui.NewHorizontalBox()
usersBox := ui.NewVerticalBox()
messageBox:=ui.NewVerticalBox()
messageBox.Append(output, true)
messageBox.Append(input, false)
messageBox.Append(send, false)
mainBox.Append(usersBox, false)
mainBox.Append(messageBox, true)
send.OnClicked(func(*ui.Button) {
_, err := conn.Write([]byte(JSONencode(userExample1.Text(),input.Text(),"SendMessageTo")))
if err!=nil{
fmt.Println("OnClickedError!")
}
input.SetText("")
})
window.SetChild(mainBox)
window.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
window.Show()
它正在从服务器连接读取并输出解码后的字符串。服务器发送如下所述:
func ParseJSON(bytes []byte, conn net.Conn) (Message, string, string) {
flag := "tcp"
message := Message{}
err := json.Unmarshal(bytes, &message)
if err != nil {
log.Print("Unmarshal doesn't work: ")
log.Fatal(err)
}
fmt.Println(message.User.Login)
fmt.Println(message.Content)
conn.Write([]byte(message.Content))
return message, "func", flag
}
我如何以此参赛表格输出
output := ui.NewMultilineNonWrappingEntry()
output.SetReadOnly(true)
从服务器收到字符串?
更新:
go func() {
message, err := bufio.NewReader(conn).ReadString('\n')
if err!=nil{
log.Fatal(err)
}
output.SetText(message)
}()
此代码放在ui.Main函数中,但不起作用。
答案 0 :(得分:1)
您可以尝试使用Append
方法:
output := ui.NewMultilineNonWrappingEntry()
// Call this from your message receiving function:
output.Append("message")
另一个选择是使用SetText
并在其他地方保留文本的缓冲区:
// Create a buffer:
buf := bytes.Buffer{}
// Write incoming messages to it:
buf.WriteString("message")
// Set the contents from the buffer
// This might be called periodically (and the buffer reseted):
output.SetText(buf.String())