Hi, On Tue, 13 Feb 2018 15:36:55 -0700 Bob van der Poel <b...@mellowood.ca> wrote:
> I know how to find the number of items. Just like you show. > > No, this is not the size of the box. I have maybe 2000 entries. I can > set the current selection, etc with code like this: > > self.lb.select_clear(ACTIVE) # needed to un-hilite existing > selection self.lb.activate(x) # make new item active > self.lb.see(x-10) # force display from 10 > previous lines > self.lb.select_set(x) # and select the new item > > If the listbox is 20 lines high, this works perfectly. But, if it is a > different size, it doesn't center. In my case I don't know the size of > box, so the "-10" is a not-to-intelligent guess. you mean, the selected item should be vertically centered in the list? I believ there is no trivial way to do this, but probably more than one way with a little tinkering. I set up a simple example with yview() instead of see(), which seems more appropriate here. I guess this simple function is certainly not perfect (but maybe it is already good enough): ###################################################### from Tkinter import * root=Tk() l = Listbox(root) l.pack(side='left', fill='both', expand=1) s = Scrollbar(root, command=l.yview) s.pack(side='right', fill='y') l.configure(yscrollcommand=s.set) for i in range (2000): l.insert('end', 'Item %d' % i) def test(event): i = 597 wd = event.widget wd.selection_clear(0, 'end') wd.selection_set(i) wd.update_idletasks() h1 = wd.winfo_height() i1, i2 = wd.nearest(0), wd.nearest(h1) wd.yview(i - (i2-i1)/2) l.bind('<F1>', test) l.focus() root.mainloop() ##################################################### Best regards Michael .-.. .. ...- . .-.. --- -. --. .- -. -.. .--. .-. --- ... .--. . .-. "The combination of a number of things to make existence worthwhile." "Yes, the philosophy of 'none,' meaning 'all.'" -- Spock and Lincoln, "The Savage Curtain", stardate 5906.4 _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org https://mail.python.org/mailman/listinfo/tkinter-discuss