首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示可以在fyne上复制的文本?

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

Stack Overflow用户
提问于 2022-01-05 21:04:51
回答 2查看 998关注 0票数 2

在我的fyne图形用户界面上,我希望显示用户可以复制的文本。到目前为止,我使用的是(多行) widget.Entry,参见下面的示例。虽然这是可行的,但这似乎不合适,因为“条目”意味着用户输入--这里的情况并非如此。

如果使用widget.Label或canvas.Text,则无法复制字符。那么这里最好的方法是什么?

示例:

代码语言:javascript
复制
package main

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/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复制。在Windows 10上,这看起来就像

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-06 16:41:52

标签仅供展示,它们不允许用户交互--这是基于web的应用程序让我们感到困惑的东西:)。在Fyne应用程序中,我们的目标是让所有用户交互,按钮和链接是交互式的,文本不是。有两种可能的办法:

  1. 在您的标签旁边放置一个“复制”按钮,这在许多应用程序中已经司空见惯(例如密码管理器或YouTube)。
  2. 使用已禁用的条目,以便文本可以与之交互,但不能编辑。
票数 2
EN

Stack Overflow用户

发布于 2022-01-07 13:36:31

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

代码语言:javascript
复制
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上,这看起来就像

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70599565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档