python文本框中文本和滚动条的自动滚动

python文本框中文本和滚动条的自动滚动,python,tkinter,Python,Tkinter,我有一个tkinter“文本”和“滚动条”工作正常。在我的程序中,文本窗口中的行将自动不断添加。因此,当插入一行新文本且数据超出限制时,我希望文本和滚动条自动滚动到底部,以便始终显示最新的文本行。如何做到这一点 还有如何链接文本窗口和滚动条的滚动,因为当我在文本窗口上滚动时,滚动不会发生。我观察到的唯一方法是拖动滚动条 scrollbar = Tkinter.Scrollbar(group4.interior()) scrollbar.pack(side = 'right',fi

我有一个tkinter“文本”和“滚动条”工作正常。在我的程序中,文本窗口中的行将自动不断添加。因此,当插入一行新文本且数据超出限制时,我希望文本和滚动条自动滚动到底部,以便始终显示最新的文本行。如何做到这一点

还有如何链接文本窗口和滚动条的滚动,因为当我在文本窗口上滚动时,滚动不会发生。我观察到的唯一方法是拖动滚动条

    scrollbar = Tkinter.Scrollbar(group4.interior())
    scrollbar.pack(side = 'right',fill='y')

    Details1 = Output()        
    outputwindow = Tkinter.Text(group4.interior(), yscrollcommand = scrollbar.set,wrap = "word",width = 200,font = "{Times new Roman} 9")
    outputwindow.pack( side = 'left',fill='y')
    scrollbar.config( command = outputwindow.yview )
    outputwindow.yview('end')
    outputwindow.config(yscrollcommand=scrollbar.set)
    outputwindow.insert('end',Details1)
在程序中,函数output()将连续发送数据,数据将滚动


提前感谢,

您可以使用带有索引的
查看
使文本小部件滚动到任何位置

例如,要使小部件的最后一行可见,可以使用索引
“end”

下面是一个完整的工作示例:

import time
try:
    # python 2.x
    import Tkinter as tk
except ImportError:
    # python 3.x
    import tkinter as tk

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)

        self.text = tk.Text(self, height=6, width=40)
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.text.yview)
        self.text.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.text.pack(side="left", fill="both", expand=True)

        self.add_timestamp()

    def add_timestamp(self):
        self.text.insert("end", time.ctime() + "\n")
        self.text.see("end")
        self.after(1000, self.add_timestamp)

if __name__ == "__main__":
    root =tk.Tk()
    frame = Example(root)
    frame.pack(fill="both", expand=True)
    root.mainloop()

查看
文本。请参阅(…)
方法

TextWidget.insert(tk.END, str(new_txt))
TextWidget.see(tk.END)

我使用此模式将(aka
insert
)文本
new_txt
添加到我的输出窗口,并将(
see
)滚动到底部(
tk.END

你好,Bryan Oakley,我能知道为什么我们必须使用time.ctime()函数吗,而且每隔一秒钟,滚动更新发生了???@DsArjun:您不必调用
time.ctime()
。这只是说明数据随时间变化的一种方式。您可以插入任何需要的信息。这只需每秒调用
add\u timestamp
。您可以调用任何想要的函数或方法。autoscroll正在我的代码中工作。谢谢。但我看到的另一个问题是,若你们把光标放在文本窗口的顶部,用指针滚轮向上滚动,它就不会向上滚动。唯一的办法就是拖上来。指针轮旋转时是否有滚动功能?我还观察到,如果该状态被禁用,则scroll将与指针轮一起工作旋转链接已断开,effbot已脱机很长时间了。@wineunuchs2unix:谢谢您让我知道。我已经删除了链接。
TextWidget.insert(tk.END, str(new_txt))
TextWidget.see(tk.END)