首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ipyvuetify中以编程方式选择TextField的所有内容?

如何在ipyvuetify中以编程方式选择TextField的所有内容?
EN

Stack Overflow用户
提问于 2020-12-09 01:19:48
回答 2查看 185关注 0票数 2

当你克隆一个url时,我想重现github的这种行为:点击时选择所有内容。

在JavaScript中,事情就是这么简单:

代码语言:javascript
复制
<input @focus="$event.target.select()">

在ipyvuetify中,我可以构建组件:

代码语言:javascript
复制
import ipyvuetify as v
import pyperclip

class CopyLink(v.TextField):
    
    def __init__(self):

        super().__init__(
            class_ = "ma-5",
            v_model = 'je suis un link', 
            outlined = True,
            label = 'link',
            readonly = True,
            append_icon = 'mdi-clipboard-outline'
        )  

        self.on_event('click', self.copy_link)

    def copy_link(self, widget, event, data):

        # copy the link to clipboard using 
        pyperclip.copy(self.v_model)

        # select all the content in case pyperclip fail
        
        return

我可以使用pyperclip将值复制到剪贴板,但如果函数失败,我希望能够选择所有文本字段内容。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-09 17:45:20

在ipyvuetify中,无法选择TextField的文本。可以使用模板模式来实现:

代码语言:javascript
复制
import ipyvuetify as vy
import traitlets

class MyCopyPaste(vy.VuetifyTemplate):
    template = traitlets.Unicode('''
    
    <template>
        <v-col>
            <v-btn icon @click="copyToClipboard()">
                <v-icon>mdi-content-copy</v-icon>
            </v-btn>
            <textarea v-model="my_text" ref="text" style="display: none" />
        </v-col>    
    </template>
    
    <script>
        module.exports = {
            methods: {
                copyToClipboard() {
                    const txt = this.$refs.text
                    txt.style.display = 'block';
                    txt.select();
                    document.execCommand('copy');
                    txt.style.display = 'none';
                }
            }
        }
    </script>
    ''').tag(sync=True)
    
    my_text = traitlets.Unicode('').tag(sync=True)
    
mcp = MyCopyPaste()
mcp.my_text = 'Hello\nWorld'
mcp
票数 1
EN

Stack Overflow用户

发布于 2021-03-02 22:55:40

事实上,Pyperclip在云托管的JupyterLab中不起作用。使用Clipboard web API,可按如下方式定义带附加副本图标的可重用自定义TextField:

代码语言:javascript
复制
class TextFieldCopy(v.VuetifyTemplate):
    v_model = traitlets.Unicode(allow_none=True).tag(sync=True)
    def __init__(self, icon='mdi-clipboard-outline', props='', v_model=''):
        self.template = '''
        <v-text-field %s v-model='v_model' append-icon='%s' @click:append="clipW">
        </v-text-field>
        <script> {methods: {
            clipW() {navigator.clipboard.writeText(this.v_model)} }}
        </script>''' % (props, icon)
        self.v_model = v_model
        super().__init__()

tf = TextFieldCopy(
    props = 'ma-5 outlined label="link" readonly',
    v_model='je suis un link'
)

当使用clearable属性设置TextField并单击清除十字时,参数allow_none=True可避免Traitlet错误,因为v-model随后将设置为None

或者,文本字段和按钮可以是使用link链接在一起的单独组件

代码语言:javascript
复制
from ipywidgets import link

class BtnClipWriteText(v.VuetifyTemplate):
    text = traitlets.Unicode(allow_none=True).tag(sync=True)
    def __init__(self, props='icon', content='<v-icon>mdi-content-copy</v-icon>'):
        self.template = '''<v-btn %s @click="clipW">%s</v-btn>
        <script> {methods: {
            clipW() {navigator.clipboard.writeText(this.text)} }}
        </script>''' % (props, content)        
        super().__init__()

btn_copy = BtnClipWriteText()
tf = v.TextField(v_model = 'je suis un link')
link((tf, 'v_model'), (btn_copy, 'text'))

对于信息,将剪贴板内容粘贴到文本字段中的相反功能可以使用以下模板类似地实现:

代码语言:javascript
复制
class BtnClipReadText(v.VuetifyTemplate):
    text = traitlets.Unicode(allow_none=True).tag(sync=True)
    def __init__(self, props='icon', content='<v-icon>mdi-content-paste</v-icon>'):
        self.template = '''<v-btn %s @click="clipR">%s</v-btn>
        <script> {methods: {
            clipR() {navigator.clipboard.readText().then(
                clipText => this.text = clipText);}}}
        </script>''' % (props, content)
        super().__init__()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65203724

复制
相关文章

相似问题

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