繁体   English   中英

Kivy TextInput光标控制问题

[英]Kivy TextInput cursor control problems

我正在尝试快速解决黑线TextInput故障( 问题 )。 我希望它插入换行符,并在每次键入第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()

我不知道如何在不编写自定义函数的情况下对其进行更改,该函数可以按默认方式处理插入文本。 我可以告诉你为什么它不工作,但是,它是因为这个而格外线路在这里做同样的,你的,但方式更快。 因此,如果您键入某些内容,您的代码将无法工作。

当您将某些内容粘贴TextInput ,您的代码有效,因为(我认为)使用剪贴板时不会调用函数insert_text()

现在,更多有关该问题/故障的信息。 这是很好的事情是这样的,因为它限制了一个线/字是“长”,为您的Texture max size 如果您想通过向TextInput的单行传递例如图像字节来强奸TextInput,那可能是一个问题(我怀疑有人会这样做,尽管我亲自尝试过:D)。

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

还要多解释一下:您不能将解决方案限制为字符数,因为例如android设备和PC ...我的笔记本电脑的Texture max size <16384> ,尽管我的手机有4096。对于这样的解决方案,这是一个巨大的差异。 您需要得到一些可以告诉您超出纹理大小或vram的信息,例如,最有可能使用OpenGL API + akshayaurora的目标解决方案比检查内存是否过剩更好,并且实现起来不会那么痛苦,尽管对于具有相同功能的设备来说可能也是必要的小纹理最大大小/ vram。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM