Как добавить автопрокрутку при вставке в Tkinter Listbox? - PullRequest
4 голосов
/ 13 сентября 2010

Я использую список (с полосой прокрутки) для входа:

self.listbox_log = Tkinter.Listbox(root, height = 5, width = 0,)
self.scrollbar_log = Tkinter.Scrollbar(root,)

self.listbox_log.configure(yscrollcommand = self.scrollbar_log.set)
self.scrollbar_log.configure(command = self.listbox_log.yview)

Теперь, когда я это сделаю:

self.listbox_log.insert(END,str)

Я хочу, чтобы выбранный элемент был выбран.Я пробовал:

self.listbox_log.selection_anchor(END)

но это не работает ... Пожалуйста, предложите решение ...

Ответы [ 2 ]

10 голосов
/ 13 сентября 2010

AFAIK виджет ScrollBar не имеет функции автоматической прокрутки, но его можно легко реализовать, вызвав метод listBox yview() после вставки нового элемента. Если вам нужно выбрать новый элемент, вы можете сделать это вручную, используя метод listbox 's select_set.

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 += 1


root = Tk()
all = AutoScrollListBox_demo(root)
root.title('AutoScroll ListBox Demo')
root.mainloop()
1 голос
/ 30 ноября 2012

попробуйте сделать это таким образом.(Я скопировал из другого вопроса: Как автоматически прокрутить окно gtk.scrolledwindow?) У меня все работает нормально.

...