【发布时间】:2016-12-09 17:25:15
【问题描述】:
我正在尝试创建一个 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()
以下链接中给出了文件中的数据示例:here
非常感谢您的宝贵时间,非常感谢。
【问题讨论】:
-
我已更改问题的标题以反映您想要修复的内容,而不是您认为需要修复的内容。主要是因为我认为情况会相反:我认为渲染所有内容会在第一次显示时变得非常慢,但滚动速度非常快(因为它已经完成了所有渲染)但必须重新渲染每个它滚动的时间会减慢它的速度。
-
您的代码中的某些缩进被破坏了。
-
“按住时,它可能会减慢到每秒 2 或 3 行” - 只有您在问题中发布的 exact 代码?另外,文件中的每一行都长吗?我每秒可能会收到 40-50 行。
-
我怀疑你有一些操作系统设置限制了这一点 - 你可以用鼠标滚轮更快地滚动吗?
-
我拿了一个quick screencap 我的滚动。我开始用鼠标滚轮滚动,但后来我改为用箭头键滚动。