wxPython SetStyle не работает
Я использую wx.TextCtrl.SetStyle() в своем коде, но он меняет стиль всего текста!
Вот мой код:
# Get all the words in my TextCtrl
words = self.GetValue().split(" ")
# Find out what the farthest uneditable word is.
farthest_uneditable = (len(words) // length_constants["words_per_block"]) * length_constants["words_per_block"]
# Use this word knowledge to calculate the actual farthest uneditable character is
farthest_position = 0
for word in range(farthest_uneditable):
farthest_position += len(words[word]) + 1
# Make all the uneditable text (everything from the beginning to farthest_uneditable) have a grey background
self.SetStyle(0, farthest_position, wx.TextAttr(wx.NullColour, (84, 84, 84)))
Я проверил этот код и убедился, что моя farthest_position не находится в конце моего TextCtrl (он был в ожидаемой позиции каждый раз). По какой-то причине весь текст в моем поле TextCtrl становится серым.
1 ответ
Из документации по wxPython 2.8. Последний абзац объясняет, где ваша проблема:
"** wxTextCtrl:: GetRange
виртуальный wxString GetRange(long from, long to) const**
Возвращает строку, содержащую текст, начинающийся с позиций от и до до в элементе управления. Позиции должны быть возвращены другим методом wxTextCtrl.
Обратите внимание, что позиции в многострочном wxTextCtrl не соответствуют индексам в строке, возвращаемой GetValue из-за различных представлений новой строки (CR или CR LF), и поэтому этот метод следует использовать для получения правильных результатов вместо извлечения частей всей стоимости. Это также может быть более эффективным, особенно если элемент управления содержит много данных ".