0

我需要在字符串中找到并用颜色或粗体字突出显示。

我想过这样做

放入红色的词=是:

var="my string is that should is appear with the word flame is in red is"

varf=var.replace(" is ","\033[1;32;40m  is ")

但这不适用于 tkinter ScrolledText,仅在终端中:s

有没有办法在 tkinter ScrolledText 小部件中执行此操作?

Word 将出现在字符串中的不同位置,因此很难执行 config.tag,因为我必须指定字符串中字符的间隔才能着色。

我的代码

def checkval(e, spec0, spec1, spec2, spec3, spec4, spec5):
        e.widget.insert("1.0", PLACEHOLDER if e.widget.get("1.0", "end-1c") == "" else "")
        reqlidst=(spec0, spec1, spec2, spec3, spec4, spec5)
        textlabl=""
        for x in reqlidst:
   
            if len(x)>1:
                #print("selected text: '%s'" % e.widget.get(SEL_FIRST, SEL_LAST))
                if x.upper() in e.widget.get("1.0", "end-1c").upper():
                    if len(textlabl)>1:
                        textlabl = textlabl + "- " + x.replace(" ", "").upper() + "  " + html.unescape('✔')+"\n\n"
                    else:
                        textlabl = "- " + x.replace(" ", "").upper() + "  " + html.unescape('✔')+"\n\n"
                else:
                    if len(textlabl) > 1:
                        textlabl =textlabl + "- " + x.replace(" ", "").lower() + "  " + html.unescape('✘')+"\n\n"
                    else:
                        textlabl = "- " + x.replace(" ", "").lower() + "  " + html.unescape('✘')+"\n\n"
        e.widget.my_var_expected.set(textlabl)

reqlidst 是要搜索并以红色显示的单词

如何更改 tkinter 文本小部件中某些单词的颜色?不回答我的问题:/

4

1 回答 1

0

Tkinter 文本中有一个tag方法。这允许您标记某些部分。我为你准备了一个小例子,其中Text-Widget动态识别单词 HelloJonny.

原则上,您只需要真正熟悉索引。

from tkinter import Text,  Button, Tk

root = Tk()


def output(event):

    length = len("Hello")
    val = len(txt.get("1.0", "end-1c"))
    for x in range(len(txt.get("1.0", "end-1c"))):
        if "Hello" in txt.get(f"1.{x}", "end-1c") or "Jonny" in txt.get(f"1.{x}", "end-1c") :
            val = x
    vals = str(val + length)
    txt.tag_add("Hello", f"1.{str(val)}", f"1.{vals}")
    txt.tag_config("Hello", background="red", foreground="white")

txt = Text(root)
txt.grid(columnspan=3)

root.bind("<Key>", output)

root.mainloop()

在此处输入图像描述

请注意,我没有为每个新行编写一个完整的程序。

例如,为了使其更具动态性,您可以更改索引。所以你可以为每一行实现它。

我的示例仅适用于第一行。

问候

于 2021-10-09T16:42:41.007 回答