Как использовать tkinter tag_config?Python 3.7.3 - PullRequest
2 голосов
/ 02 мая 2019

Итак, я хотел создать текстовый редактор, и я застрял в этой части, я хочу, чтобы он изменил цвет определенного слова, которое вводится в режиме реального времени, например: допустим, я набираю 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()

Я пытаюсь выяснить это уже неделю, и я действительно надеюсь, что кто-то может помочь мне с этим, если кто-то может предоставить мне хоть какую-то информацию или примерэто было бы очень признательно.

1 Ответ

0 голосов
/ 03 мая 2019

tag_configure предназначен только для настройки tag, но вы должны назначить tag слову в тексте, чтобы изменить его цвет.

Вы можете использовать text.tag_add(tag_name, text_start, text_end) для добавления тега к выделенному тексту.

Проблема может быть в том, как найти text_start и text_end для слова или строки.

Tkinter имеет специальные значения, такие как end, insert, wordstart и т. Д.

Я различаю теги, чтобы изменить цвет для последней строки и для последнего слова. Это показывает разные ситуации.

Я использую -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: Текст

Tcl / Tk: Текстовые индексы

TkDocs: Текст -> Позиции и индексы текста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...