簡體   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