Kivy TextInput游标控制问题

时间:2016-05-04 16:20:15

标签: python python-3.x kivy

我试图快速修复黑线TextInput小故障(issue)。我希望它插入换行符,并在键入行中的第100个字符时将光标移动到下一行。它会插入换行符,但由于某种原因不会移动光标。我该怎么做?

以下是代码:

from kivy.app import App
from kivy.uix.textinput import TextInput

class MessageInput(TextInput):
    def __init__(self, **kwargs):
        super(MessageInput, self).__init__(**kwargs)

    def on_text(self, inst, text):
        if len(inst._lines[-1]) == 100:
            self.text += "\n"
            inst.cursor = (0, inst.cursor_row + 1)

class TestApp(App):
    def build(self):
        tx = MessageInput()
        return tx

TestApp().run()

1 个答案:

答案 0 :(得分:0)

我不知道如何在不编写自定义函数的情况下更改它,以便按照默认方式处理文本。我可以告诉你为什么它不起作用,因为this并且特别是行right here与你一样,但是方式早点。因此,如果键入某些内容,则代码将无效。

当您将粘贴某些内容放入TextInput时,您的代码就会正常工作,因为(我认为)当您使用剪贴板时,函数insert_text()不会被调用。

现在更多关于那个问题/故障。它的方式很好,因为它将一个行/单词限制为" long",作为Texture max size。如果你想强奸TextInput的单行并将图像字节传递给它(我怀疑有人想这样做,虽然我亲自尝试过它:D),这可能是一个问题。

即使它是multiline=True,它也会自动将您的下一个字(即当您插入<space>或其他断字字符)添加到新行时然后整个VRAM /纹理最大尺寸的东西重新启动(可能是因为新的纹理),这是非常合理的。

另外要解释一下: 你无法将你的解决方案限制为多个角色,因为例如android-device和PC ...我的笔记本电脑有Texture max size <16384>,虽然我的手机有4096。对于像这样的解决方案来说,这是一个巨大的差异。你需要得到一些可以告诉你纹理大小或vram被超出的东西,即使用OpenGL api最有可能+ akshayaurora的目的解决方案更好,并且实施起来比检查超出内存更少痛苦,尽管可能是必要的对于纹理最大尺寸/ vram太小的设备。