Python Tkinter文本滚动滞后问题

Python Tkinter文本滚动滞后问题,python,tkinter,Python,Tkinter,我有一个超级简单的文本框实现: root = Tk() root.geometry('1650x900') center_windows(root) root.resizable(0, 0) scrollbar = Scrollbar(root) old_xml_text = Text(root, wrap=WORD, yscrollcommand=scrollbar.set, height=40, width=60) old_xml_text.grid(row=0, column=0,

我有一个超级简单的文本框实现:

root = Tk()
root.geometry('1650x900')
center_windows(root)
root.resizable(0, 0)
scrollbar = Scrollbar(root)
old_xml_text = Text(root, wrap=WORD, yscrollcommand=scrollbar.set, height=40, width=60)    
old_xml_text.grid(row=0, column=0,pady=(100,0),padx=(50,50),sticky='we')    
scrollbar.config(command=old_xml_text.yview)
问题是,如果我在那里粘贴一个长文本(2k行),它在滚动时会变得非常滞后

我怎样才能解决这个问题

如果没有使用
Tkinter
的解决方案,那么有没有其他方法可以使用其他包(Python)来实现这一点?当我通过或滚动文本时,我不希望有任何延迟。我是否被迫使用C/C++


欢迎任何建议。

问题在于文本小部件插入所有换行符,从而计算总行数和当前位置所需的计算时间。滚动时,计算速度太慢,会出现延迟,滚动条会变得无用

如果要加快速度并消除滞后,必须手动插入换行符,这样就不会有行扩展文本窗口的60个字符宽度。如果插入换行符而不将其传递给包装器,则不会延迟。请参见以下示例以供参考:

from tkinter import *

root = Tk()
root.geometry('800x600')
#center_windows(root)
root.resizable(0, 0)

scrollbar = Scrollbar(root)
old_xml_text = Text(root, wrap=WORD, yscrollcommand=scrollbar.set, width=60,height=10)    
old_xml_text.grid(row=0, column=0,pady=(100,0),padx=(0,0),sticky=N+S+E)    
scrollbar.config(command=old_xml_text.yview)
scrollbar.grid(row=0,column=1,pady=(100,0),sticky=N+S+W)

scrollbar2 = Scrollbar(root)
old_xml_text2 = Text(root, wrap=WORD, yscrollcommand=scrollbar2.set, width=60,height=10)    
old_xml_text2.grid(row=2, column=0,pady=(100,0),padx=(0,0),sticky=N+S+E)    
scrollbar2.config(command=old_xml_text2.yview)
scrollbar2.grid(row=2,column=1,pady=(100,0),sticky=N+S+W)


old_xml_text.insert(END,"Hello World, this is a test of reaction times\n"*1000)
old_xml_text2.insert(END,"Hello World, this is a test of reaction times"*1000)

您可以看到,带有换行符的文本小部件完全可以滚动,而使用文本小部件包装器的文本小部件则不能滚动。

您的代码没有问题。我认为问题在于tcl/windows滚动条更新了帖子,thxYes,它是滞后的。如果使用换行方式粘贴数千行,甚至计算将创建的行数都需要一些时间。只有这样,滚动才能绑定到文本。在空闲控制台中也是如此。如果输出太大,就会出现延迟滚动。使用固定间距字体和字符换行可以稍微加快速度。谢谢@MartinWettstein,我用另一个问题更新了帖子。再次感谢。是的,有一种方法可以减少延迟:如果插入到文本小部件的文本没有使用文本小部件的单词包装来换行,那么延迟实际上是不存在的。因此,您只需对文本进行预处理,使行的长度不超过40个字符(文本小部件的宽度)。预处理可能需要几秒钟,但这是值得的。就我所见,您正在尝试显示XML,在这里频繁换行应该不是问题。太棒了!有没有一种方法可以在不预处理文本的情况下实现这一点?或者直接在
Python
code中处理?谢谢是的,我绝对推荐用python对其进行预处理。毕竟,这只是一个将字符串拆分为最多60个字符的问题,然后用换行符将其连接起来。这应该不是问题。如果您想要清晰的XML结构和正确的缩进,这可能会很困难,但在pyhton中这是很有可能的。