当前位置: 首页 > 知识库问答 >
问题:

如何使用要高亮显示的文本的索引而不是行来高亮显示tkinter文本小部件中的文本部分。col-tkinter指数

端木淇
2023-03-14

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

from tkinter import *

class textHighlightWidget(Frame):
   def __init__(self, parent=None):
       Frame.__init__(self, parent)
       self.pack(expand=YES, fill=BOTH)
       self.makeWidgets()

    def text_for_widget(self):
        return 'This is a cat. This is a dog \n This is a cat and a 
dog. \n' \
               'This is a horse'

    def highlight_text_index(self):
        sent_beg_index = 20
        sent_end_index = 40
        self.text1.tag_add('sel', sent_beg_index, sent_end_index)

    def highlight_text_line_col(self):
        sent_beg_index = '1.0'
        sent_end_index = '2.5'
        self.text1.tag_add('sel', sent_beg_index, sent_end_index)

    def highlight_text_convert_index(self):
        sent_beg_index = 20
        sent_end_index = 40
        formatted_sent_beg_index = self.text1.index(sent_beg_index)
        formatted_sent_end_index = self.text1.index(sent_end_index)
        self.text1.tag_add('sel', formatted_sent_beg_index, 
formatted_sent_end_index)

    def makeWidgets(self):
        #self.btn1 = Button(self, text='Highlight Text', 
command=self.highlight_text_index)
        #self.btn1 = Button(self, text='Highlight Text', 
command=self.highlight_text_line_col)
        self.btn1 = Button(self, text='Highlight Text', 
command=self.highlight_text_convert_index)
        self.btn1.grid(row=0, column=0)
        self.text1 = Text(self, height=4, width=30)
        self.text1.tag_configure("center", justify='center')
        self.text1.insert('end', self.text_for_widget(), 'center')
        self.text1.grid(row=0, column=1)


if __name__ == '__main__':
    root = Tk()
    app = textHighlightWidget(root)
    root.mainloop()

我有三种不同的突出显示文本定义。第一个(highlight_text_index)只使用我要突出显示的文本部分的开始字符和结束字符的整数索引。使用此def运行代码时,出现以下错误:

_tkinter.TclError: bad text index "20"

第二highlight_textdef(highlight_text_line_col)使用tkinter期望的line.col格式。此方法突出显示文本的指定部分,但我不知道如何将整数索引转换为line.col索引格式,因此第二highlight_textdef仅显示tag_add命令是正确的命令,但不允许我选择我想要的文本部分高亮显示。

第三highlight_textdef(highlight_text_convert_index)使用tkinter的文本索引方法将索引转换为tkinter期望的line.col格式。这似乎对我来说,它应该工作,但我再次得到相同的错误消息,我得到了第一个highlight_textdef:

_tkinter.TclError: bad text index "20"

如果有人知道如何突出显示tkinter文本小部件中的文本,则直接形成索引的整数形式,或者如何将索引转换为行。特金特上校希望我能感谢你的帮助。

共有1个答案

汲品
2023-03-14

你必须使用电话线。文本小部件的col格式。但是,文本小部件支持对基本索引进行修改。例如,您可以添加

因此,如果您想使用像“20”这样的传统字符串索引,可以使用“1.0 20c”获取第20个字符。

 类似资料:
  • 我想突出显示JavaFX中显示的部分文本。到目前为止,我正在使用对象中的对象。为了突出显示文本中的特定部分,我使用标记将文本切割成部分(objects),以突出显示或不突出显示以下代码。 不幸的是,背景高亮显示不起作用,我有奇怪的换行符,如图所示。文本不包含任何换行符。 (对图片质量表示抱歉,这是一个真实的截图:)) 感谢任何帮助。 解决方案正如@eckig所建议的,在HBox中使用多个标签是一个

  • 问题内容: 我想知道如何根据某些模式来更改某些单词和表达式的样式。 我正在使用小部件,但不确定如何执行此操作(与文本编辑器中语法高亮显示的想法相同)。即使这是用于此目的的正确小部件,我也不确定。 问题答案: 这是用于这些目的的正确小部件。基本概念是,将属性分配给标签,然后将标签应用于小部件中的文本范围。您可以使用文本小部件的命令来查找与您的模式匹配的字符串,这将为您返回足够的信息,将标记应用于匹配

  • 我目前使用的是原生JS,我正在尝试在contenteditable div中构建突出显示文本功能。我已经成功构建了突出显示功能,但当我想使用单个按钮在突出显示文本和非突出显示文本之间切换时,遇到了一个问题。所以我通过 并且我正在使用作为范围对象函数的周围内容包装选定的文本。 但是现在,当我试图取消突出显示的文本的某些部分和纯文本的某些部分时,自然行为应该取消突出显示的文本并突出显示纯文本。为了实现

  • 我正在使用mouseup事件来触发一个函数,该函数突出显示文本,并用跨度包围突出显示的文本(堆栈溢出函数): 我遇到的主要问题是,只要包含,文本只会在高亮显示尝试中高亮显示约20%(否则高亮显示会立即消失)。我尝试添加一个setTimeout,在1s内不调用surroundContent。我还尝试删除remove()语句,但仍然没有效果。 你知道为什么会这样吗?

  • 我试图实现与linq文本搜索。我有一个用电子邮件数据填充的消息表。我想能够在消息体中搜索。然而,电子邮件正文很长,我想只显示搜索文本的一小部分,例如,如果我搜索: 奥特 在以下案文中: 知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。但是,在最低限度上,我们需要一个实验室来进行日常工作。两人或两人在一个无教区的房间里互相指责。除偶尔因疏忽而死亡外,不得因疏忽而导致动物死亡。 结果应

  • 问题内容: 我正在使用一个简单的消息传递系统,并且需要将以下内容添加到Tkinter文本小部件中: 拼写检查 更改字体的选项(在选定的文本上) 更改字体颜色的选项(在选定的文本上) 更改字体大小的选项(在选定的文本上) 我了解tkinter文本小部件可以通过标记机制使用多种字体和颜色,但是我不知道如何利用这些功能。 如何使用“文本”小部件的功能实现这些功能?具体来说,如何更改字体系列,单词的颜色和