2016-05-04 3 views
0

Я пытаюсь быстро исправить черную линию TextInput сбой (issue). Я хочу, чтобы он вставлял новую строку и перемещал курсор на следующую строку всякий раз, когда набирается 100-й символ в строке. Он вставляет новую строку, но по какой-то причине не перемещает курсор. Как мне это сделать?Проблемы с управлением курсором Kivy TextInput

Вот код:

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

Я не знаю, как изменить его без написания пользовательской функции, которая обрабатывает вставки текста так, как он должен работать по умолчанию. Я могу сказать вам, почему это не работает, и это связано с this и особенно с линией right here, которая делает то же, что и вы, но способ раньше. Поэтому ваш код не будет работать, если вы типа что-то.

Ваш код работает, когда вы паста что-то в TextInput, потому что (я думаю) функция insert_text() не вызывается при использовании буфера обмена.

Подробнее об этой проблеме/сбоях. Это хорошо, потому что это ограничивает один линия/слово быть как «длинный», как ваш Texture max size. Это может быть проблемой, если вы хотите изнасиловать единственную строку TextInput с передачей, например, байтов изображения в это (я сомневаюсь, что кто-то хотел бы это сделать, хотя я лично пробовал это: D).

И даже если это multiline=True, он будет автоматически положить следующее слово (т.е. при вставке <space> или других слово отключающей символ) на новую строку, а затем весь VRAM/Texture максимального размера вещь перезагружается (из-за возможно, новая текстура), что вполне разумно.

Кроме того, чтобы объяснить это немного больше: Вы не можете предел ваше решение ряда символов, потому что взять, например, андроид-устройства и ПК ... Мой ноутбук имеет Texture max size <16384>, хотя мой телефон имеет 4096. Это огромная разница для такого решения. Вам нужно получить что-то, что скажет вам, что размер текстуры или vram превышен, т. Е. С помощью OpenGL api. Скорее всего, + ориентированное решение akshayaurora лучше и будет менее болезненным для реализации, чем проверка на превышение памяти, хотя это может потребоваться и для устройств с малый размер макс/vram.

Смежные вопросы