【问题标题】:Copy Text From Texit_Input从 Text_Input 复制文本
【发布时间】:2018-02-13 22:14:51
【问题描述】:

我需要复制文本以备后用 按 (ctrl + c) 时,会出现错误 所以我用了bubble,但是出现了同样的错误

*****Python********

from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder

class Progress(Popup):
    pass
class ScreenManagement(ScreenManager):
    pass

class Func(Screen):
    pass

presentation = Builder.load_file("try_.kv")

class MainApp(App):
    Progress = Progress()
    def build(self):
        return presentation
if __name__ == "__main__":
    MainApp().run()

*****KV文件*******

#:import Factory kivy.factory.Factory
# #:import Clipboard kivy.core.clipboard.Clipboard
<Progress>:
    text: ""
    separator_color: 0, 0, 0, 0

    BoxLayout:
        TextInput:
            id: textinput
            text: "Your Key is samphone"
            copydata: 'text'
            readonly: True
            use_bubble: True
            allow_copy: True

        Button:
            text: "Click"
            on_release:
                root.dismiss()

ScreenManagement:
    Func:

<Func>:
    BoxLayout:
        Button:
            text: "Click"
            on_release:
                Factory.Progress().open()

****错误*****

文件 "C:\Users\Sherif\AppData\Local\Programs\Python\Python35\lib\site-packages\kivy\uix\textinput.py", 第 378 行,在做 textinput.copy() 文件 "C:\Users\Sherif\AppData\Local\Programs\Python\Python35\lib\site-packages\kivy\uix\textinput.py", 第 1712 行,副本 返回 Clipboard.copy(self.selection_text) 文件 "C:\Users\Sherif\AppData\Local\Programs\Python\Python35\lib\site-packages\kivy\core\clipboard__init__.py", 第 73 行,副本 self._copy(data) 文件 "C:\Users\Sherif\AppData\Local\Programs\Python\Python35\lib\site-packages\kivy\core\clipboard__init__.py", 第 87 行,在 _copy 中 self.put(数据, self._clip_mime_type)

文件 "C:\Users\Sherif\AppData\Local\Programs\Python\Python35\lib\site-packages\kivy\core\clipboard\clipboard_winctypes.py", 第 55 行,输入 msvcrt.wcscpy_s(c_wchar_p(hCd), len(text), c_wchar_p(text))

ValueError: 嵌入空字符

【问题讨论】:

    标签: python copy kivy clipboard bubble-popup


    【解决方案1】:

    详情请参考以下示例:

    示例

    main.py

    ​​>
    from kivy.app import App
    from kivy.uix.popup import Popup
    from kivy.uix.screenmanager import ScreenManager, Screen
    
    
    class Progress(Popup):
        pass
    
    
    class Func(Screen):
        pass
    
    
    class ScreenManagement(ScreenManager):
        pass
    
    
    class MainApp(App):
    
        def build(self):
            return ScreenManagement()
    
    
    if __name__ == "__main__":
        MainApp().run()
    

    main.kv

    #:import Factory kivy.factory.Factory
    
    <Progress>:
        text: ""
        separator_color: 0, 0, 0, 0
    
        BoxLayout:
            TextInput:
                id: textinput
                text: "Your Key is samphone"
                readonly: True
                allow_copy: True
                copydata: self.text
    
            Button:
                text: "Click"
                on_release:
                    root.dismiss()
    
    <Func>:
        BoxLayout:
            Button:
                text: "Click"
                on_release:
                    Factory.Progress().open()
    
    <ScreenManagement>:
        Func:
    

    输出 - 稍后粘贴

    【讨论】:

      【解决方案2】:

      实际上,这里的整个ValueError“仅”是关于this pull request 中CPython 内部的最近(3.5.4+ 和3.6.3+)更改,这基本上对于我们的ctypes 剪贴板来说意味着调用更改后的API _PyUnicode_AsUnicode 而不是原来的PyUnicode_AsUnicodedescribed in the commit message

      _PyUnicode_AsUnicode() 类似于 PyUnicode_AsUnicode(),但检查空字符..

      它引发了一个错误。花了一段时间才弄明白,因为我在发行说明中没有找到它,但是它已在 kivy#5579 中修复,并且很快会在 master 分支中。

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多