2010-09-13 1 views
3

Я использую ListBox (с скроллинга) для регистрации:
Как добавить Autoscroll для вставки в список Tkinter?

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) 

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

ответ

9

AFAIK в ScrollBar виджета не имеет автоматическую прокрутку функции, но она может можно легко реализовать, вызвав метод listBoxyview() после того, как вы введете новый элемент. Если вам нужно выбрать новый элемент, то вы также можете сделать это вручную, используя метод 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() 
+0

Вы также можете использовать команду «видеть» в списке, хотя при просмотре конечного элемента эффект одинаков. –

+0

спасибо, я использовал self.listbox_log.insert (END, ул) размер = LEN (self.listbox_log.get (-1, END)) self.listbox_log.yview_scroll (размер, "единицы") ваш путь гораздо более элегантным. – lalli

1

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

def on_TextOfLog_size_allocate(self, widget, event, data=None): 
    adj = self.scrolled_window.get_vadjustment() 
    adj.set_value(adj.upper - adj.page_size) 
+1

Это не будет работать в списке, потому что нет метода 'get_vadjustment', и в исходном вопросе не упоминается ничего о виджетах с именем' scrolled_window'. Вы уверены, что отправили этот ответ на правильный вопрос? –

+0

Я использую pygtk, но не tkint, извините за ошибку. – user1862643

Смежные вопросы