dou8mwz5079 2018-05-23 13:39
浏览 34
已采纳

通过连接读取更新多行条目

I got simply desktop application wrote on Go with this lib: github.com/ProtonMail/ui. The main window's drawing below:

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()

And it's reading and outputting decoded string from server connection. Server sending described below:

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
}

How i can output in this entry form

output := ui.NewMultilineNonWrappingEntry()
output.SetReadOnly(true)

received strings from server?

UPDATE:

go func() {
            message, err := bufio.NewReader(conn).ReadString('
')
            if err!=nil{
                log.Fatal(err)
            }
            output.SetText(message)
        }()

This code placed in ui.Main function, but it doesn't work.

  • 写回答

1条回答 默认 最新

  • drap5081683 2018-05-23 14:10
    关注

    You can try using the Append method:

    output := ui.NewMultilineNonWrappingEntry()
    
    // Call this from your message receiving function:
    output.Append("message")
    

    The other option is to use SetText and keep a buffer of the text somewhere else:

    // 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())
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效