[英]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.