【问题标题】:How to begin highlighting words如何开始突出显示单词
【发布时间】:2019-11-07 03:21:39
【问题描述】:

我正在编写我自己的 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')

但即使没有刚刚输入的字符#,输出也会仅突出显示已经存在的字符。 对我想要的工作有什么想法? 非常感谢您。

【问题讨论】:

    标签: python-3.x tkinter tkinter-text


    【解决方案1】:

    我从Get position in tkinter Text widget得到一个想法

    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)
    

    【讨论】:

    • 我不明白你在这里写了什么。这应该是您自己问题的答案吗?你还需要帮助吗?
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 2011-02-25
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多