How to add Autoscroll on insert in Tkinter Listbox?
AFAIK the ScrollBar widget doesn't have an auto-scroll feature, but it can be easily implemented by calling the listBox
's yview()
method after you insert a new item. If you need the new item to be selected then you can do that manually too using the listbox
's select_set
method.
from Tkinter import *class AutoScrollListBox_demo: def __init__(self, master): frame = Frame(master, width=500, height=400, bd=1) frame.pack() self.listbox_log = Listbox(frame, height=4) self.scrollbar_log = Scrollbar(frame) self.scrollbar_log.pack(side=RIGHT, fill=Y) self.listbox_log.pack(side=LEFT,fill=Y) self.listbox_log.configure(yscrollcommand = self.scrollbar_log.set) self.scrollbar_log.configure(command = self.listbox_log.yview) b = Button(text="Add", command=self.onAdd) b.pack() #Just to show unique items in the list self.item_num = 0 def onAdd(self): self.listbox_log.insert(END, "test %s" %(str(self.item_num))) #Insert a new item at the end of the list self.listbox_log.select_clear(self.listbox_log.size() - 2) #Clear the current selected item self.listbox_log.select_set(END) #Select the new item self.listbox_log.yview(END) #Set the scrollbar to the end of the listbox self.item_num += 1root = Tk()all = AutoScrollListBox_demo(root)root.title('AutoScroll ListBox Demo')root.mainloop()
try to do it in this way. (I have copied from another question: How to auto-scroll a gtk.scrolledwindow?) It works fine for me.
def on_TextOfLog_size_allocate(self, widget, event, data=None): adj = self.scrolled_window.get_vadjustment() adj.set_value( adj.upper - adj.page_size )