Как начать выделять слова - PullRequest
0 голосов
/ 07 ноября 2019

Я пишу приложение собственного редактора Python. Я использую текстовый виджет и хочу выделить слова, поскольку слова набираются как редактор Python. Как только введен символ #, я хочу начать выделять все символы, за которыми следует символ #, красным цветом.

Ниже приведен частичный код для этой цели. Когда символ # был идентифицирован как он был введен в виджет «Текст», я добавил тег «CM» от введенного символа до конца строки (я думал, что это подойдет мне).

import tkinter as tk

def onModification(event=None):
    c=event.char
    if not c: return
    pos=hT0.index(tk.INSERT)

    if c=='#':
        hT0.tag_add('CM',pos,f'{int(pos.split(".")[0])}.end')
        return

hW=tk.Tk()
hT0=tk.Text(hW,wrap='none',font=('Times New Roman'12))
hT0.insert('end','')
hT0.place(x=27, y=0, height=515,width=460)
hT0.bind('<Key>', onModification)
hT0.tag_config('CM', foreground='#DD0000')

Но на выходе выделяются только те символы, которые уже существовали, даже без только что набранного символа #. Идея для работы, которую я хочу? Заранее большое спасибо.

1 Ответ

0 голосов
/ 07 ноября 2019

Я получил идею от Получить позицию в текстовом виджете tkinter

def onModification(event=None):
    ...
    pos=hT0.index(tk.INSERT)
    lineN, ColN=[int(c) for c in pos.split('.')]
    if c=='#':
        #hT0.tag_add('CM',pos,f'{int(pos.split(".")[0])}.end')
        hT0.tag_add('CM',f'{lineN}.{ColN-1}',f'{lineN}.end')
        return

...
#hT0.binds('<key>', onModification) needs to be changed to...

hT0.bindtags(('Text','post-class-bindings','.','all'))
hT0.bind_class('post-class-bindings', '<KeyPress>', onModification)
...