2017-01-19 1 views
1

У меня возникли проблемы с поиском количества элементов Listbox, которые бы соответствовали только видимой области Listbox, так что вам не нужно прокрутить вниз. Извините, если это тривиально, мне трудно понять это.Рассчитайте количество элементов, которые поместились бы в видимой области списка в Tkinter

Я написал небольшой пример, чтобы проиллюстрировать мою проблему:

from Tkinter import * 
from tkFont import Font 

myfont=Font(family='Times', size=12) 

a=Listbox(activestyle='dotbox', font=myfont) 
a.insert(END, *xrange(100)) 
a.pack(side='left', fill=BOTH, expand=1) 

mainloop() 

так что теперь у меня есть ListBox, но только некоторые из ее элементов являются видимыми. Как я могу определить, сколько я могу поместиться, не выходя за пределы видимой области? Любые идеи будут приветствоваться. Благодаря!

ответ

1

Размер высоты tkFont хранится в linespace метрике, которая доступна с помощью метода metrics() -

myfont.metrics()['linespace'] 
#returns 19 for myfont as initiated in the question 

Высота Listbox виджета извлекаемый с помощью winfo_height(). В общей сложности -

visible_lines= a.winfo_height()/myfont.metrics()['linespace'] 

Ресурс - http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/fonts.html

0

В списках есть опция height, которая представляет собой количество строк текста для отображения. Значение по умолчанию равно 10. Поскольку вы оставляете по умолчанию как есть, в вашем окне отображаются 10 строк, содержащих от 0 до 9. Я обнаружил это, проверив http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html, который я использую регулярно. У этого есть только несколько ошибок.

+0

Но как я знаю, сколько строк помещается в конкретной видимой области? Предположим, пользователь изменил размер окна или изменил шрифт, как я знаю, для заданного размера списка, сколько элементов подходит без прокрутки? – Jay

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