如何在tkinter.Text中用另一个词替换一个词

2024-09-30 06:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我实际上正在尝试制作一个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()

但很明显,这给了我一个错误,因为没有这样的命令。有人能帮我吗


Tags: orimport命令master编码if颜色系统
2条回答

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

我找到了另一个答案,是有人提出了同样的问题。在接受的答案中,您可以找到一个示例代码。运行它,看看它是否适合你。 How to change the color of certain words in the tkinter text widget?

这是最终代码,它工作得非常完美:

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

相关问题 更多 >

    热门问题