簡體   English   中英

Tkinter 文本滾動滯后問題

[英]Tkinter Text scroll lag issue

我有一個文本框的這個超級簡單的實現:

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的解決方案,是否有任何其他方法可以使用其他 package (在 Python 中)實現此目的? 當我過去或滾動文本時,我不希望有任何延遲。 我是否被迫使用 C/C++?

任何建議表示贊賞。

問題在於文本小部件插入所有換行符從而計算總行數和當前 position 所需的計算時間。 滾動時,這種計算太慢了,你會出現滯后,滾動條變得無用。

如果您想加快速度並消除滯后,您必須手動插入換行符,以便沒有行擴展文本 window 的 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)

您可以看到帶有換行符的 Text 小部件可以很好地滾動,而使用 Text 小部件包裝器的小部件則不能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM