我试图快速修复黑线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()
答案 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太小的设备。