首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kivy Clipboard.copy标签文本

Kivy Clipboard.copy标签文本
EN

Stack Overflow用户
提问于 2016-09-23 07:40:57
回答 2查看 1.9K关注 0票数 4

当我双击标签时,我想复制标签的内容: self.text,但以下内容不起作用:

main.py

代码语言:javascript
复制
#!/usr/bin/kivy
# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty


class DoubletapClipboardInterface(BoxLayout):
    pass


class DoubletapClipboardApp(App):
    #copy_clipboard = ObjectProperty()

    def build(self):
        self.title = 'DoubletapClipboard'

        #self.copy_clipboard = DoubletapClipboardInterface()
        return(DoubletapClipboardInterface())   # self.copy_clipboard


if __name__ == '__main__':
    DoubletapClipboardApp().run()

doubletapclipboard.kv

代码语言:javascript
复制
#:kivy 1.9.0
#:import Clipboard kivy.core.clipboard.Clipboard

<DoubletapClipboardInterface>:
    orientation: 'vertical'

    TextInput:
        hint_text: 'Try to paste here to see if it works'

    Label:
        text: 'Can I be copied?'
        on_double_tap: Clipboard.copy(self.text)  # <-- How do I do this the correct way?

错误

代码语言:javascript
复制
 kivy.lang.builder.BuilderException: Parser: File "/home/stef-ubuntu/bitbucket/kanjiorigin_data/test/doubletap_clipboard/doubletapclipboard.kv", line 11:
 ...
       9:    Label:
      10:        text: 'Can I be copied?'
 >>   11:        on_double_tap: Clipboard.copy(self.text)  # <-- How do I do this the correct way?
 ...
 AttributeError: double_tap
   File "/usr/lib/python3/dist-packages/kivy/lang/builder.py", line 628, in _apply_rule
     raise AttributeError(key)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 08:40:28

根据@MatthiasSchreiber的建议,我从TextInput()复制了代码

main.py

代码语言:javascript
复制
#!/usr/bin/kivy
# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.properties import ObjectProperty
from kivy.utils import platform

Clipboard = None
CutBuffer = None

class TouchLabel(Label):

    def __init__(self, **kwargs):
        self._touch_count = 0
        super(TouchLabel, self).__init__(**kwargs)
        self.register_event_type('on_double_tap')

        if platform == 'linux':
            self._ensure_clipboard()

    def _ensure_clipboard(self):
        global Clipboard, CutBuffer
        if not Clipboard:
            from kivy.core.clipboard import Clipboard, CutBuffer

    def on_touch_down(self, touch):
        print("hello")
        if self.disabled:
            return

        touch_pos = touch.pos
        if not self.collide_point(*touch_pos):
            return False
        if super(TouchLabel, self).on_touch_down(touch):
            return True

        touch.grab(self)
        self._touch_count += 1
        if touch.is_double_tap:
            self.dispatch('on_double_tap')

    def on_double_tap(self, *args):
        Clipboard.copy(self.text)  # <-- How do I do this the correct way?
        print("Copied :D")


class DoubletapClipboardInterface(BoxLayout):
    pass


class DoubletapClipboardApp(App):

    def build(self):
        self.title = 'DoubletapClipboard'

        return(DoubletapClipboardInterface())


if __name__ == '__main__':
    DoubletapClipboardApp().run()

doubletabclipboard.kv

代码语言:javascript
复制
#:kivy 1.9.0
# #:import Clipboard kivy.core.clipboard.Clipboard

<TouchLabel>

<DoubletapClipboardInterface>:
    orientation: 'vertical'

    TextInput:
        hint_text: 'Try to paste here to see if it works'

    TouchLabel:
        text: 'Can I be copied?'
        #on_double_tap: Clipboard.copy(self.text)  # <-- not working
票数 4
EN

Stack Overflow用户

发布于 2016-09-23 08:15:52

标签中没有"on_double_tap“,您需要自己创建该方法。不过,有一个是针对TexInput的,您可以在代码中查看它是如何实现的。

另外,您需要将剪贴板导入到您的kv文件中。

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

https://stackoverflow.com/questions/39655326

复制
相关文章

相似问题

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