当前位置: 首页 > 面试题库 >

如何在Tkinter文本小部件中突出显示文本

呼延聪
2023-03-14
问题内容

我想知道如何根据某些模式来更改某些单词和表达式的样式。

我正在使用Tkinter.Text小部件,但不确定如何执行此操作(与文本编辑器中语法高亮显示的想法相同)。即使这是用于此目的的正确小部件,我也不确定。


问题答案:

这是用于这些目的的正确小部件。基本概念是,将属性分配给标签,然后将标签应用于小部件中的文本范围。您可以使用文本小部件的search命令来查找与您的模式匹配的字符串,这将为您返回足够的信息,将标记应用于匹配的范围。

以下是如何扩展Text类以包括突出显示与模式匹配的文本的方法的示例。

在此代码中,模式必须是字符串,不能是已编译的正则表达式。另外,该模式必须遵守Tcl的正则表达式语法规则。

class CustomText(tk.Text):
    '''A text widget with a new method, highlight_pattern()

    example:

    text = CustomText()
    text.tag_configure("red", foreground="#ff0000")
    text.highlight_pattern("this should be red", "red")

    The highlight_pattern method is a simplified python
    version of the tcl code at http://wiki.tcl.tk/3246
    '''
    def __init__(self, *args, **kwargs):
        tk.Text.__init__(self, *args, **kwargs)

    def highlight_pattern(self, pattern, tag, start="1.0", end="end",
                          regexp=False):
        '''Apply the given tag to all text that matches the given pattern

        If 'regexp' is set to True, pattern will be treated as a regular
        expression according to Tcl's regular expression syntax.
        '''

        start = self.index(start)
        end = self.index(end)
        self.mark_set("matchStart", start)
        self.mark_set("matchEnd", start)
        self.mark_set("searchLimit", end)

        count = tk.IntVar()
        while True:
            index = self.search(pattern, "matchEnd","searchLimit",
                                count=count, regexp=regexp)
            if index == "": break
            if count.get() == 0: break # degenerate pattern which matches zero-length strings
            self.mark_set("matchStart", index)
            self.mark_set("matchEnd", "%s+%sc" % (index, count.get()))
            self.tag_add(tag, "matchStart", "matchEnd")


 类似资料:
  • 问题内容: 我很好奇是否有人知道一旦/当用户完成在网页上的文本选择后,我将如何触发一个函数运行?我希望用户能够选择文本,并且在短暂的延迟后(或立即,此时无所谓),文本附近会出现一个叠加按钮,用户可以单击该按钮,然后我返回并运行我的更多基于选择的代码。这是用于Firefox扩展。 我能想到的一个类似示例就像在IE中一样,您可以在其中选择文本,然后显示“ Web加速器”。我99%确信我知道如何实际覆盖

  • 问题内容: 我可以高亮显示一些文本,使其从一个值开始,然后从另一个值结束,如下所示,但颜色为黄色吗? “” JTextPane 高亮显示 文本“” 谢谢。 问题答案: 通常,有几种可能性,具体取决于您对“突出显示”的真正含义:-) 通过在文档级别更改任意文本部分的样式属性来突出显示,例如 通过textPane级别上的荧光笔突出显示:

  • 问题内容: 我正在尝试创建一个程序,该程序执行一系列给定的用户输入。仅在某些情况下才需要几个用户输入,并且如果可能的话,我想仅在选择一个Checkbutton(表示存在要求这些输入的情况)时显示这些输入值的Entry框和Labels。我不确定该怎么做: 将我要添加的标签和条目框放在已经存在的行之间。 取消选中“选择”按钮时,“隐藏”标签和输入框,而不进行选择,这样,如果重新选择“选择”按钮,则可以

  • 问题内容: 有人可以通过可以在网页上突出显示文本的JavaScript函数来帮助我。要求是-仅突出显示一次,而不是像我们在搜索情况下那样突出显示所有出现的文本。 问题答案: 您可以使用jquery 突出显示效果。 但是,如果您对原始javascript代码感兴趣,请看一下我得到的内容。将复制粘贴到HTML中,打开文件,然后单击“突出显示”-这应该突出显示“ fox”一词。在性能方面,我认为这适用于

  • 您好,我是Swift新手,在我的项目中使用SwiftUI,我下载了一些天气数据,并将其显示在ContentView()中。 我想突出显示文本的某一部分,如果它包含一些特定的单词,但我不知道如何开始。 在ContentView()中,我尝试设置一个函数,该函数接收从web下载的字符串并返回一个字符串。我认为这是错误的,因为SwiftUI根本不为文本应用修饰符。 例如,在我的ContentView()

  • 我试图在一个tkinter文本小部件中突出显示文本的一部分。如果您知道要突出显示的文本的line.col索引,这很容易做到。但是,我想突出显示的文本部分的索引是典型的字符串索引格式(整数),而不是tkinter要求的line.col索引格式。下面是一些简化的代码,显示了我正在努力实现的目标: 我有三种不同的突出显示文本定义。第一个(highlight_text_index)只使用我要突出显示的文本