【问题标题】:Tkinter dynamically changing text colour of recurring strings in a textboxTkinter 动态更改文本框中重复字符串的文本颜色
【发布时间】:2012-06-15 05:58:12
【问题描述】:

我设置了一个 Tkinter 文本框来显示文件的内容。示例行如下:

SUCCESS - Downloaded example.jpg
File was 13KB in size

我想要做的是让任何包含“SUCCESS”一词的行将其文本颜色更改为蓝色。请注意,我需要它是动态的,因为这个词可以在一个文件中找到数百次,并且无法预测它会在哪里。 这是我用来将文件内容输出到文本框的代码。效果很好。

log = open(logFile, 'r')
while 1:
    line = log.readline()
    if len(line) == 0:
        break
    else:
        self.txtLog.insert(Tkinter.END, line)
        self.txtLog.insert(Tkinter.END, os.linesep)
log.close()

我正在尝试像下面的示例行一样使用 tag_add 和 tag_config 但无济于事。

 `self.txtLog.tag_add("success", "1.0", "1.8")
  self.txtLog.tag_config("success", foreground="blue")`

`

【问题讨论】:

    标签: python textbox tkinter python-2.7


    【解决方案1】:

    您需要配置一个标签,并在将文本添加到末尾时指定该标签。 这应该可以工作(尽管未经测试):

    self.txtLog.tag_config("success", foreground="blue", font="Arial 10 italic")
    log = open(logFile, 'r')
    while 1:
        line = log.readline()
        if len(line) == 0:
            break
        else:
            tags = ("success",) if line.startswith("SUCCESS") else None
            self.txtLog.insert(Tkinter.END, line+os.linesep, tags)
    log.close()
    

    另外,我刚刚注意到您在tag_config 之前使用了tag_add,我相信它应该是相反的。

    【讨论】:

    • 感谢您的帮助!我试过你的代码。 .startswith 有一个错误,因为它需要从字符串中调用,并且您将文件放在那里。我将line 字符串放在它的位置。之后没有错误,但代码也没有显示结果
    • 是的,我的意思是line。 :) 没有结果是什么意思?一个空的文本框?还是没有颜色?
    • 我更新了代码,可能是空列表而不是无...还要确保文本没有被禁用(我曾经遇到过这个问题)
    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2013-02-19
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2019-01-20
    相关资源
    最近更新 更多