如何使用tkinter tag_config?的Python 3.7.3

时间:2019-05-02 16:38:39

标签: python-3.x windows tkinter

所以我想做一个文本编辑器,但我一直卡在这部分上,我想让它更改实时输入的某个单词的颜色,例如:可以说我输入 < em> print 我希望它自动将前景色从默认的黑色更改为蓝色。我真的不知道您是否必须使用 tag_configure 来执行此操作,但是如果可以的话,请有人帮我工作,谢谢。

代码:

from tkinter import *

root = Tk()

text = Text(root)
text.grid(row=0)

def Event(event):
    text.tag_configure("print", foreground="blue")

#This is a KeyBind to trigger the Function: Event
root.bind("<Return>", Event)

root.mainloop()

我已经尝试找出一个星期了, 我真的希望有人可以帮助我, 如果有人至少可以向我提供一些信息或示例 会非常感激的。

2 个答案:

答案 0 :(得分:1)

如果您想在输入时更改文本的颜色,您需要做一些事情:

  1. 定义具有所需颜色的标签。你已经得到了:

    text.tag_configure("print", foreground="blue")

哪个有效。您可能希望能够触发其他事件来更改颜色以应用于新键入的文本,否则您的编辑器将非常无聊。您可以有几个按钮,每个按钮的颜色不同,等等。您可能需要多个标签,因为如果您更改“打印”标签的配置,则已使用该标签名称标记的所有内容都将更改以匹配新配置。

  1. 然后您必须在输入文本时将标记应用于文本。可能有几种方法可以做到这一点,但您可以通过为 {{1} 设置绑定来处理输入的每个字符} 事件。每次触发事件时,因为输入了一个新字符,请返回并将标签“打印”应用于该字符。

所以,大致如下:

"<Key>"

连同:

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

这应该大致给了你你想要的东西,但是当它设置好时,它仍然不会太有趣。您可以有多个标签,每个标签都配置为在视觉上不同(不同的前景色和背景色等),并根据需要将不同的标签应用于您输入的内容。

INSERT 是一个特殊的文本小部件标记,表示插入点/光标在小部件中的位置。当您键入时,INSERT 会一直向右移动,总是在您键入的内容之后。所以,“INSERT - 1c”是之前的位置,指向刚刚输入的字符。

快乐编码!

答案 1 :(得分:0)

tag_configure仅用于配置tag,但是您必须为文本中的单词分配tag才能更改其颜色。

您可以使用text.tag_add(tag_name, text_start, text_end)将标签添加到所选文本。

问题可能是如何找到单词或行的text_starttext_end

Tkinter具有特殊值,例如endinsertwordstart等。

我使用不同的标签来更改最后一行和最后一个单词的颜色。它显示了不同的情况。

我使用-2c来跳过最后一个Return,但是在其他系统中,它仅需要-1c。如果没有-2c,则在将新字符放入新行时将使用颜色。

如果您在最后一个单词之后插入空格,则不会找到最后一个单词。

如果更改tag_configure的顺序,则可能不起作用。

import tkinter as tk

# --- functions ---

def on_return(event):
    # -2c (-2chars) to skip `Return`

    # red color for last line
    text.tag_add('red_fg', 'end-2c linestart', 'end-2c')

    # blue color for last word
    text.tag_add('blue_fg', 'insert-2c wordstart', 'end-2c')


# --- main ---

root = tk.Tk()

text = tk.Text(root)
text.pack()

# tag's order can be important
text.tag_configure("red_fg", foreground="red")
text.tag_configure("blue_fg", foreground="blue")

root.bind("<Return>", on_return)

root.mainloop()

effbot.org:Text indices

Tcl / Tk:Text

TkDocs:Callback at MongoDB Operation With Node.js->文本位置和索引