tkinter如何实现text组件文本超出屏幕显示范围时自动滚动到底部

请问,我在使用tkinter时给text组件添加了滚动条,但是当文本内容会随着参数的传递不断更新后会超出显示范围,需要手动下拉滚动条才会显示出最新的内容,有没有什么办法能让滚动条自动滚动到最底部?

Jason990420
最佳答案

通常,文本小部件会响应键盘和鼠标事件。 设置state = tk.NORMAL以获得此行为。

如果设置state = tk.DISABLED,则说明文本小部件将不响应,并且您也将无法以编程方式修改其内容。

import tkinter as tk

def add_one_line():
    global counter

    chat_record_box.configure(state=tk.NORMAL)
    text = f'Line {counter}'
    if counter:
        text = '\n'+text
    chat_record_box.insert("end", text)
    chat_record_box.see("end")
    chat_record_box.configure(state=tk.DISABLED)
    counter += 1

mainWnd = tk.Tk()
mainWnd.title("test")

mainWnd.attributes("-alpha",0.95)
chat_record_box = tk.Text(mainWnd, fg='Violet', font=("楷体"),bg='FloralWhite',
    highlightthickness='2', selectbackground='blue')
chat_record_box.pack(padx=10, pady=10)
chat_record_box.configure(state=tk.DISABLED)

button = tk.Button(text="Add one line", command=add_one_line)
button.pack()
counter = 0

mainWnd.mainloop()
2年前 评论
讨论数量: 5
Jason990420
# text = Text(root)
text.see("end")

文本部件 Text

2年前 评论

@Jason990420 谢谢您的回答,但我用了这个方法后还是无法到底部显示最新内容

mainWnd = tk.Tk()
mainWnd.title("test")

mainWnd.attributes("-alpha",0.95)
chat_record_box = tk.Text(mainWnd, fg='Violet',font=("楷体"),bg='FloralWhite',highlightthickness='2',selectbackground='blue')
chat_record_box.configure(state=tk.DISABLED)
chat_record_box.pack(padx=10, pady=10)
chat_record_box.see("end")

@Jason990420

2年前 评论
Jason990420

通常,文本小部件会响应键盘和鼠标事件。 设置state = tk.NORMAL以获得此行为。

如果设置state = tk.DISABLED,则说明文本小部件将不响应,并且您也将无法以编程方式修改其内容。

import tkinter as tk

def add_one_line():
    global counter

    chat_record_box.configure(state=tk.NORMAL)
    text = f'Line {counter}'
    if counter:
        text = '\n'+text
    chat_record_box.insert("end", text)
    chat_record_box.see("end")
    chat_record_box.configure(state=tk.DISABLED)
    counter += 1

mainWnd = tk.Tk()
mainWnd.title("test")

mainWnd.attributes("-alpha",0.95)
chat_record_box = tk.Text(mainWnd, fg='Violet', font=("楷体"),bg='FloralWhite',
    highlightthickness='2', selectbackground='blue')
chat_record_box.pack(padx=10, pady=10)
chat_record_box.configure(state=tk.DISABLED)

button = tk.Button(text="Add one line", command=add_one_line)
button.pack()
counter = 0

mainWnd.mainloop()
2年前 评论

好像是ajax异步加载。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!