-1

我实际上正在尝试制作一个 python 编码编辑器,为此我需要制作一个颜色编码系统。例如:'def', 'or', 'if', 'elif', 'else', 'import' 等应该是不同的颜色,因为它们是命令。像这样的东西:

from tkinter import *
import threading

def colorcommands():
    while True:
        a = textArea.get(0.0, END)
        for f in ["def", "or", "and", "if", "import", "else"]:
            textArea.replace(f, (f, fg="red"))

master = Tk()

textArea = Text()
textArea.pack()

threading.Thread(target=colorcommands).start()

master.mainloop()

但显然这给了我一个错误,因为没有这样的命令。谁能帮我吗?

4

2 回答 2

0

这是最终的代码,它完美地工作:

from tkinter import *
import threading, keyword

def Process():
    while True:
        a = textArea.get(0.0, END)
        b = a.split("\n")
        words = {}
        for f in range(1, len(b)+1):
            bb = b[f-1].split(" ")
            bb2 = []
            for ff in range(1, len(bb)+1):
                try:
                    bb3 = words[bb[ff-1]]
                    bb3.append(str(f) + "." + str(len(" ".join(bb2))) + " - " + str(f) + "." + str(len(" ".join(bb2)) + len(bb[ff-1]) + 1))
                except:
                    words[bb[ff-1]] = [str(f) + "." + str(len(" ".join(bb2))) + " - " + str(f) + "." + str(len(" ".join(bb2)) + len(bb[ff-1]) + 1)]
                bb2.append(bb[ff-1])

        for f3 in words:
            if f3 in keyword.kwlist:
                for ff in words[f3]:
                    wordss = ff.split(" - ")
                    textArea.tag_add("code", wordss[0], wordss[1])
                    textArea.tag_config("code", foreground="red")

master = Tk()

textArea = Text()
textArea.pack()

threading.Thread(target=Process).start()

master.mainloop()

谢谢大家!:D

于 2020-05-20T08:14:13.863 回答
-1

我相信你可以通过使用标签来实现这一点。标签可用于更改 Tkinter 中文本的某些部分。首先实际上是使用tag_configure配置标签,然后使用tag_add应用它。您必须自己查看语法的详细信息。

我从有同样问题的人那里找到了另一个答案。在接受的答案中,您可以找到示例代码。运行它,看看它是否适合你。 如何更改 tkinter 文本小部件中某些单词的颜色?

于 2020-05-20T07:01:22.667 回答