如何在显示大量文本时加快滚动响应速度

T. *_*son 6 python render tkinter

我正在尝试创建一个Python脚本来突出显示.txt文件中的特定模式.为此,我更改了一个脚本,该脚本使用Tkinter突出显示给定的数据集.然而,我倾向于让它处理的文件大约是10000行,这导致慢滚动,因为我认为它呈现所有内容 - 无论是否在屏幕上(如果我错了,请纠正我).是否可以更改我的代码,以便以更有效的方式呈现输出?我试图寻找一种方法来做到这一点,但我自己没有找到任何东西.

我的代码如下:

from Tkinter import *

class FullScreenApp(object):
    def __init__(self, master, **kwargs):
        self.master=master
        pad=3
        self._geom='200x200+0+0'
        master.geometry("{0}x{1}+0+0".format(
            master.winfo_screenwidth()-pad, master.winfo_screenheight()-pad))
        master.bind('<Escape>',self.toggle_geom)            
    def toggle_geom(self,event):
        geom=self.master.winfo_geometry()
        print(geom,self._geom)
        self.master.geometry(self._geom)
        self._geom=geom

root = Tk()
app = FullScreenApp(root)
t = Text(root)
t.pack()

#Import file
with open('data.txt') as f:
    for line in f:
        t.insert(END, line)

#Search terms - Leave blank if not required       
search_term0 = '0xCAFE'
search_term1 = '0x0011'
search_term2 = '0x961E'
search_term3 = '0x0000'
search_term4 = ''

#Assigns highlighted colours for terms not blank
t.tag_config(search_term0, background='red')
if search_term1 != '':
    t.tag_config(search_term1, background='red')
if search_term2 != '':    
    t.tag_config(search_term2, background='red')
if search_term3 != '':
    t.tag_config(search_term3, background='red')
if search_term4 != '':
    t.tag_config(search_term4, background='red')

#Define search
#Requires text widget, the keyword, and a tag
def search(text_widget, keyword, tag):
    pos = '1.0'
    while True:
        idx = text_widget.search(keyword, pos, END)
        if not idx:
            break
        pos = '{}+{}c'.format(idx, len(keyword))
        text_widget.tag_add(tag, idx, pos)

#Search for terms that are not blank
search(t, search_term0, search_term0)
if search_term1 != '':
    search(t, search_term1, search_term1)
if search_term2 != '':
    search(t, search_term2, search_term2)
if search_term3 != '':
    search(t, search_term3, search_term3)
if search_term4 != '':
    search(t, search_term4, search_term3)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

以下链接给出了文件中数据的示例:此处

非常感谢您的时间,非常感谢.

Mic*_*lie 0

所以这个问题可以通过多线程来解决。一台计算机可以同时执行多项任务,否则,您的网络体验将不一样。这是一个演示多线程的简单函数

from threading import Thread

def execOnDifferentThread(funct=print, params=("hello world",)):
    t = Thread(target=funct, args=params)
    t.start()
Run Code Online (Sandbox Code Playgroud)

现在请注意,这可能不是最好的示例,但是现在要并行运行函数,您所要做的就是execOnDifferentThread(funct=A, params=B)其中 A 是函数名称,B 是 将传递给函数的参数元组。现在,我不想为您编写代码,但是使用此函数,您可以修改multi-thread代码的某些部分以使其更快。如果您确实遇到困难,请在哪里发表评论并提供帮助。但请先自己尝试一下,现在您已经掌握了多线程的能力