Получение изолированного текста из TextInput - PullRequest
0 голосов
/ 01 сентября 2018

Легко получить весь текст из виджета TextInput. Но что, если кто-то хочет получить определенную порцию только в определенной позиции? Представьте, что вы получаете текст точно от позиции курсора x до позиции курсора x в абзаце?

Я смог это сделать, но то, как я его использовал, выглядит как уловка. Интересно, есть ли подходящий метод для этого? (не могу найти подходящую функцию для этого в документации)

Например: я хотел получить слово, набираемое в данный момент (но это можно применить и к поиску / замене слова f.e. и т. Д.). Поэтому я использовал необработанный код в методе Text_put on_double_tap () без последней части (я не хотел, чтобы он выбирал слово визуально). Итак, во-первых, я установил альфа-цвет selection_color в ноль (чтобы он был невидим), сделал selection_text с позиции x до x, отменил выделение и вернул альфа-цвет обратно к значению по умолчанию. Но это звучит неправильно, это не питонский способ делать вещи, это скорее уловка. Есть ли более питонский / правильный способ сделать это?

Это текущий код, который я использую для выбора текущего набираемого слова и получения строки (это метод внутри класса экземпляра виджета TextInput):

#code from on_double_tap()
def select_word(self):
    #Code from the on_double_tap() method inside TextInputwidget
    ci = self.cursor_index()
    cc = self.cursor_col
    line = self._lines[self.cursor_row]
    len_line = len(line)
    start = max(0, len(line[:cc]) - line[:cc].rfind(u' ') - 1)
    end = line[cc:].find(u' ')
    end = end if end > - 1 else (len_line - cc)

    #Now this is the part I added
    #Save de default selection_color before hiding it with alpha 0
    selection_color = self.selection_color
    self.selection_color=[0,0,0,0]
    self.select_text(ci - start, ci + end)
    word = self.selection_text
    self.cancel_selection()
    #Restore default selection_color
    self.selection_color = selection_color
    return(word)

Сокрытие не кажется лучшим способом сделать это, не так ли? Есть ли способ лучше? Спасибо

...