为了账号安全,请及时绑定邮箱和手机立即绑定

如何显示可以在 fyne GUI 上复制的文本?

如何显示可以在 fyne GUI 上复制的文本?

Go
holdtom 2022-10-24 15:14:03
在我的fyneGUI 上,我想显示用户可以复制的文本。到目前为止,我使用的是 (multi-line) widget.Entry,请参见下面的示例。虽然这可行,但似乎不合适,因为“输入”意味着用户输入——这里不是这种情况。如果我使用 widget.Label 或 canvas.Text,则无法复制字符。那么这里最好的方法是什么?例子:package mainimport (    "time"    "fyne.io/fyne/v2"    "fyne.io/fyne/v2/app"    "fyne.io/fyne/v2/container"    "fyne.io/fyne/v2/data/binding"    "fyne.io/fyne/v2/widget")func main() {    myApp := app.New()    myWindow := myApp.NewWindow("demo")    txtBound := binding.NewString()    txtWid := widget.NewEntryWithData(txtBound)    txtWid.MultiLine = true    // we can disable the Entry field so the user can't modify the text:    txtWid.Disabled()    go func() {        for {            txtBound.Set(time.Now().Format("2006-01-02\n15:04:05\nMST -0700"))            time.Sleep(time.Second)        }    }()    content := container.NewBorder(nil, nil, nil, nil, txtWid)    myWindow.SetContent(content)    myWindow.Resize(fyne.NewSize(500, 300))    myWindow.ShowAndRun()}可以选择输入字段中的文本,然后使用鼠标/右键单击上下文菜单或 ctrl-c 进行复制。在 Windows 10 上,这看起来像
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

标签仅用于显示,它们不提供用户交互 - 这是基于 Web 的应用程序让我们感到困惑的事情:)。在 Fyne 应用程序中,我们的目标是提示所有用户交互,按钮和链接是交互的,文本不是。有两种可能的方法:

  1. 在您的标签旁边放置一个“复制”按钮,这已成为许多应用程序(例如密码管理器或 YouTube)的常见做法

  2. 使用禁用的条目,以便文本可以交互但不能编辑。


查看完整回答
反对 回复 2022-10-24
?
森林海

TA贡献2011条经验 获得超2个赞

为了补充 andy.xyz 的答案,这是一个如何使用按钮将特定内容复制到剪贴板的示例。Fyne 窗口有一个Clipboard类型,它提供了必要的界面,例如

import (

    "time"


    "fyne.io/fyne/v2"

    "fyne.io/fyne/v2/app"

    "fyne.io/fyne/v2/container"

    "fyne.io/fyne/v2/data/binding"

    "fyne.io/fyne/v2/layout"

    "fyne.io/fyne/v2/theme"

    "fyne.io/fyne/v2/widget"

)


func main() {

    myApp := app.New()

    myWindow := myApp.NewWindow("demo")


    txtBound := binding.NewString()

    txtWid := widget.NewLabelWithData(txtBound)


    bottomBox := container.NewHBox(

        layout.NewSpacer(),

        widget.NewButtonWithIcon("copy content", theme.ContentCopyIcon(), func() {

            if content, err := txtBound.Get(); err == nil {

                myWindow.Clipboard().SetContent(content)

            }

        }),

    )


    content := container.NewBorder(nil, bottomBox, nil, nil, txtWid)


    go func() { // make changing content...

        for {

            txtBound.Set(time.Now().Format("2006-01-02\n15:04:05\nMST -0700"))

            time.Sleep(time.Second)

        }

    }()


    myWindow.SetContent(content)

    myWindow.Resize(fyne.NewSize(500, 300))

    myWindow.ShowAndRun()

}

在 Windows 10 上,这看起来像

//img1.sycdn.imooc.com//63563b7700014ebc04990328.jpg

查看完整回答
反对 回复 2022-10-24
  • 2 回答
  • 0 关注
  • 356 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信