Текстовый виджет Python Tkinter чрезвычайно медленный при добавлении нескольких тегов с помощью tag_add () - PullRequest
0 голосов
/ 07 мая 2018

У меня есть значительный фрагмент текста, содержащийся в виджете Python Tkinter Text. Мне нужно покрасить фон каждой буквы в тексте, индивидуально, в зависимости от другой переменной. Я делаю это, добавляя теги с tag_add. Проблема в том, что отзывчивость виджета значительно замедляется при добавлении всех тегов. Без тегов все бегает бегло. Что я могу сделать?

Это минимальный пример кода:

from Tkinter import *
import tkMessageBox
import Tkinter as ttk
import tkFileDialog
import csv

import ttk
from ttk import *

root = Tk()

root.minsize(width=1280, height=600)
root.maxsize(width=1280, height=600)

w, h = root.winfo_screenwidth(), root.winfo_screenheight()
x = (w/2) - 640
y = (h/2) - 300
root.geometry('%dx%d+%d+%d' % (1200, 640, x, y-80))

#Horizontal (x) Scroll bar
xscrollbar = Scrollbar(orient=HORIZONTAL)
xscrollbar.pack(side=BOTTOM, fill=X)
#Vertical (y) Scroll Bar
yscrollbar = Scrollbar()
yscrollbar.pack(side=RIGHT, fill=Y)

MSA_text1 = Text(height=30, width=150, xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set)
MSA_text1.pack()
MSA_text1.configure(wrap="none", font="TkFixedFont")
MSA_text1.place(x=105,y=0)

#Configure the scrollbars
xscrollbar.config(command=MSA_text1.xview)
yscrollbar.config(command=MSA_text1.yview)


for number2 in range(1,20):

    MSA_text1.insert(END, "SPAELHSFTHCGQTALTLQGATTTEASNILRSCHACRGGNPQHQMPRGHIRRGLLPNHIWQGDITHFKYKNTLYRLHVWVDTFSGAISATQKRKETSSEAISSLLQAIAHLGKPSYINTDNGPAYISQDFLNMCTSLAIRHTTHVPYNPTSSGLVERSNGILKTLLYKYFTDKPDLPMDNALSIALWTINHLNVLTNCHKTRWQLHHSPRLQPIPETRSLSNKQTHWYYFKLPGLNSRQWKGPQEALQEAAGAALIPVSASSAQWIPWRLLKRAACPRPVGGPADPKEKDLQHHG" +"\n")

    for number in range(0,295):

        MSA_text1.tag_add(number, str(number2)+"."+str(number), str(number2)+"."+str(number+1))
        MSA_text1.tag_config(number, background="red", foreground="black")

MSA_text1.configure(state="disabled")

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