Я пытаюсь выделить часть текста в текстовом виджете tkinter.Это легко сделать, если вы знаете индекс line.col текста, который вы хотите выделить.Однако индекс текстовой части, которую я хотел бы выделить, находится в типичном формате строкового индекса (целое число), а не в формате индекса line.col, который требуется для tkinter.Ниже приведен упрощенный код, который показывает, что я пытаюсь выполнить:
from tkinter import *
class textHighlightWidget(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack(expand=YES, fill=BOTH)
self.makeWidgets()
def text_for_widget(self):
return 'This is a cat. This is a dog \n This is a cat and a
dog. \n' \
'This is a horse'
def highlight_text_index(self):
sent_beg_index = 20
sent_end_index = 40
self.text1.tag_add('sel', sent_beg_index, sent_end_index)
def highlight_text_line_col(self):
sent_beg_index = '1.0'
sent_end_index = '2.5'
self.text1.tag_add('sel', sent_beg_index, sent_end_index)
def highlight_text_convert_index(self):
sent_beg_index = 20
sent_end_index = 40
formatted_sent_beg_index = self.text1.index(sent_beg_index)
formatted_sent_end_index = self.text1.index(sent_end_index)
self.text1.tag_add('sel', formatted_sent_beg_index,
formatted_sent_end_index)
def makeWidgets(self):
#self.btn1 = Button(self, text='Highlight Text',
command=self.highlight_text_index)
#self.btn1 = Button(self, text='Highlight Text',
command=self.highlight_text_line_col)
self.btn1 = Button(self, text='Highlight Text',
command=self.highlight_text_convert_index)
self.btn1.grid(row=0, column=0)
self.text1 = Text(self, height=4, width=30)
self.text1.tag_configure("center", justify='center')
self.text1.insert('end', self.text_for_widget(), 'center')
self.text1.grid(row=0, column=1)
if __name__ == '__main__':
root = Tk()
app = textHighlightWidget(root)
root.mainloop()
У меня есть три различных определения highlight_text.Первый (highlight_text_index) использует только целочисленные индексы начального и конечного символа части текста, которую я хотел бы выделить.Когда я запускаю код с этим определением, я получаю следующую ошибку:
_tkinter.TclError: bad text index "20"
Второе определение highlight_text (highlight_text_line_col) использует формат line.col, который ожидает tkinter.Этот метод выделяет указанную часть текста, однако я не знаю, как преобразовать мои целочисленные индексы в формат индекса line.col, поэтому это второе определение highlight_text только показывает, что команда tag_add является правильной командой, но не позволяетмне выбрать желаемую часть текста для выделения.
Третье определение highlight_text (highlight_text_convert_index) использует метод текстового индекса tkinter для преобразования индекса в формат line.col, который ожидает tkinter.Мне кажется, что это должно работать, но снова я получаю то же сообщение об ошибке, которое я получил с первым определением highlight_text:
_tkinter.TclError: bad text index "20"
Если кто-нибудь знает, как выделить текст в текстовом виджете tkinter, непосредственно сформируйте целочисленную формуиндекса или как преобразовать индекс в формат line.col, которого ожидает tkinter, я был бы признателен за помощь.