Виджет Listbox предназначен для отображения ряда строк текста. Обычно он используется для того, чтобы пользователь мог выбрать один или несколько элементов из списка. Во всех строках текста используется один и тот же шрифт. Если вам нужно что-то более напоминающее текстовый редактор, смотрите Раздел 24, "Виджет Text".
Чтобы создать новый виджет Listbox внутри корневого окна или фрейма parent:
w = tk.Listbox(parent, option, ...)
Этот конструктор возвращает новый виджет Listbox. Опции:
Таблица 22. Опции виджета Listbox
activestyle |
Этот параметр задает внешний вид активной строки. Он может иметь любое из этих значений: 'underline' - Активная строка будет подчеркнута. Это вариант по умолчанию. 'dotbox' - Активная строка заключена в пунктирную линию со всех четырех сторон. 'none' - Активной строке не придается никакого особого вида. |
bg или background |
Цвет фона в Listbox. |
bd или borderwidth |
Ширина границы вокруг Listbox. По умолчанию - два пикселя. Возможные значения см. в Раздел 5.1, "Размеры". |
cursor |
Курсор, который появляется при наведении мыши на Listbox. См. раздел Раздел 5.8, "Курсоры". |
disabledforeground |
Цвет текста в Listbox, когда его состояние (state) равно tk.DISABLED. |
exportselection |
По умолчанию пользователь может выделять текст с помощью мыши, и выделенный текст будет экспортирован в буфер обмена. Чтобы отключить это поведение, используйте exportselection=0. |
font |
Шрифт, используемый для текста в Listbox. См. раздел Раздел 5.4, "Шрифты". |
fg или foreground |
Цвет, используемый для текста в Listbox. См. раздел Раздел 5.3, "Цвета". |
height |
Количество строк (не пикселей!), отображаемых в Listbox. По умолчанию 10. |
highlightbackground |
Цвет подсветки фокуса, когда виджет не имеет фокуса. Смотрите Раздел 53, "Фокус: маршрутизация ввода с клавиатуры". |
highlightcolor |
Цвет, отображаемый в подсветке фокуса, когда виджет имеет фокус. |
highlightthickness |
Толщина выделения фокуса. |
listvariable |
Переменная StringVar, связанная с полным списком значений в Listbox (см. раздел 52, "Управляющие переменные: значения за виджетами"). Если вы вызовете метод .get() переменной listvariable, то получите строку вида "('v0', 'v1', ...)", где каждое vi - это содержимое одной строки Listbox. Чтобы изменить сразу весь набор строк в Listbox, вызовите .set(s) для listvariable, где s - строка, содержащая значения строк с пробелами между ними. Например, если listCon - это StringVar, связанная с параметром listvariable списка Listbox, то этот вызов приведет к тому, что список Listbox будет содержать три строки: listCon.set('ant bee cicada') Этот вызов вернет строку "('ant', 'bee', 'cicada')": listCon.get() |
relief |
Выбирает трехмерные эффекты границ. По умолчанию используется tk.SUNKEN. Другие значения см. в Раздел 5.6, "Стили рельефа". |
selectbackground |
Цвет фона для отображения выделенного текста. |
selectborderwidth |
Ширина границы, которую следует использовать вокруг выделенного текста. По умолчанию выделенный элемент отображается сплошным блоком цвета selectbackground; если увеличить selectborderwidth, то элементы будут раздвигаться дальше друг от друга, а выделенный элемент будет иметь рельеф tk.RAISED (см. Раздел 5.6, "Стили рельефа"). |
selectforeground |
Цвет переднего плана для отображения выделенного текста. |
selectmode |
Определяет, сколько элементов можно выделить и как перетаскивание мышью влияет на выделение: tk.BROWSE: Обычно в listbox можно выбрать только одну строку. Если вы щелкните на элементе, а затем перетащите его на другую строку, выделение будет следовать за мышью. Это значение используется по умолчанию. tk.SINGLE: Вы можете выбрать только одну строку, и вы не можете перетаскивать мышь - где бы вы ни нажали кнопку 1, эта строка будет выбрана. tk.MULTIPLE: Вы можете выбрать любое количество строк одновременно. Щелчок на любой строке определяет, будет ли она выбрана или нет. tk.EXTENDED: Вы можете выбрать любую соседнюю группу линий одновременно, щелкнув на первой строке и перетащив ее к последней. |
state |
По умолчанию Listbox находится в состоянии tk.NORMAL. Чтобы Listbox не реагировал на события мыши, установите этот параметр в значение tk.DISABLED. |
takefocus |
Обычно фокус перемещается по виджетам Listbox. Установите этот параметр в 0, чтобы убрать виджет из последовательности. См. раздел Раздел 53, "Фокус: маршрутизация ввода с клавиатуры". |
width |
Ширина виджета в символах (не пикселях!). Ширина основывается на средней величине символа, поэтому некоторые строки такой длины в непропорциональных шрифтах могут не поместиться. По умолчанию - 20. |
xscrollcommand |
Если вы хотите, чтобы пользователь мог прокручивать Listbox по горизонтали, вы можете связать виджет Listbox с горизонтальной полосой прокрутки. Установите этот параметр в метод .set полосы прокрутки. Подробнее о виджетах Listbox с возможностью прокрутки см. в Раздел 14.1, "Скроллинг виджета Listbox". |
yscrollcommand |
Если вы хотите позволить пользователю прокручивать Listbox по вертикали, вы можете связать виджет Listbox с вертикальной полосой прокрутки. Установите этот параметр в метод .set полосы прокрутки. Смотрите Раздел 14.1, "Скроллинг виджета Listbox". |
Для многих методов объектов Listbox используется специальный набор значений для индекса:
Если вы указываете индекс как целое число, он ссылается на строку Listbox с этим индексом, считая от 0.
Индекс tk.END ссылается на последнюю строку в Listbox.
Индекс tk.ACTIVE ссылается на выбранную строку. Если Listbox допускает множественный выбор, он ссылается на строку, которая была выбрана последней.
Строка индекса вида '@x,y' ссылается на строку, ближайшую к координатам (x,y) относительно левого верхнего угла виджета.
Методы для объектов Listbox включают:
.activate(index)
Выбирает строку, указанную по заданному
index.
.bbox(index)
Возвращает ограничивающую рамку строки, указанной по
index, в виде 4-кортежа(xoffset, yoffset, width, height), где верхний левый пиксель рамки находится в точке(xoffset, yoffset), аwidthиheightзаданы в пикселях. Возвращаемое значениеwidthвключает только ту часть строки, которую занимает текст.
Если строка, указанная аргументом
index, не видна, метод возвращаетNone. Если она частично видна, возвращаемое ограничение может выходить за пределы видимой области.
.curselection()
Возвращает кортеж, содержащий номера строк выделенного элемента или элементов, считая от 0. Если ничего не выделено, возвращает пустой кортеж.
.delete(first, last=None)
Удаляет строки, чьи индексы находятся в диапазоне [
first,last], включительно (в отличие от обычного соглашения в Python, где удаление прекращается до последнего индекса), считая от 0. Если второй аргумент опущен, удаляется единственная строка с индексомfirst.
.get(first, last=None)
Возвращает кортеж, содержащий текст строк с индексами от
firstдоlast, включительно. Если второй аргумент опущен, возвращается текст строки, ближайшей кfirst.
.index(i)
Если возможно, позиционирует видимую часть
Listboxтак, чтобы строка, содержащая индексi, находилась в верхней части виджета.
.insert(index, *elements)
Вставляет одну или несколько новых строк в
Listboxперед строкой, указаннойindex. Используйтеtk.ENDв качестве первого аргумента, если вы хотите добавить новые строки в конецListbox.
.itemcget(index, option)
Получает одно из значений опций для определенной строки в
Listbox. Значения опций см. в разделеitemconfigниже. Если данная опция не была установлена для данной строки, возвращаемое значение будет пустой строкой.
.itemconfig(index, option=value, ...)
Изменяет опцию конфигурации для строки, указанной в
index. Имена опций включают:
background- Цвет фона данной строки.
foreground- Цвет текста данной строки.
selectbackground- Цвет фона данной строки при ее выделении.
selectforeground- Цвет текста данной строки при ее выделении.
.nearest(y)
Возвращает индекс видимой строки, ближайшей к координате Y относительно виджета
Listbox.
.scan_dragto(x, y)
См.
scan_markниже.
.scan_mark(x, y)
Используйте этот метод для реализации сканирования-быстрой устойчивой прокрутки
Listbox. Чтобы получить эту возможность, привяжите событие нажатия кнопки мыши к обработчику, который вызываетscan_markс текущим положением мыши. Затем привяжите событие<Motion>к обработчику, вызывающемуscan_dragtoс текущим положением мыши, иListboxбудет прокручиваться со скоростью, пропорциональной расстоянию между положением, зафиксированнымscan_mark, и текущим положением.
.see(index)
Регулирует положение
Listboxтаким образом, чтобы строка, на которую ссылаетсяindex, была видна.
.selection_anchor(index)
Помещает "якорь выделения" на строку, выбранную аргументом
index. После размещения этого якоря вы можете ссылаться на него с помощью специальной индексной формыtk.ANCHOR.
Например, для
Listboxс именемlboxэта последовательность выберет строки 3, 4 и 5:
lbox.selection_anchor(3) lbox.selection_set(tk.ANCHOR,5)
.selection_clear(first, last=None)
Снимает выделение со всех строк между индексами
firstиlast, включительно. Если второй аргумент опущен, снимается выделение строки с индексомfirst.
.selection_includes(index)
Возвращает 1, если строка с заданным
indexвыделена, иначе возвращает 0.
.selection_set(first, last=None)
Выбирает все строки между индексами
firstиlast, включительно. Если второй аргумент опущен, выбирается строка с индексомfirst.
.size()
Возвращает количество строк в
Listbox.
.xview()
Чтобы сделать
Listboxгоризонтально прокручиваемым, установите опциюcommandсвязанной горизонтальной полосы прокрутки на этот метод. См. Раздел 14.1, "Скроллинг виджета Listbox".
.xview_moveto(fraction)
Прокручивает
Listboxтак, чтобы крайняя левая часть (fraction) ширины его самой длинной строки находилась за пределами левой стороныListbox. Фракция находится в диапазоне [0,1].
.xview_scroll(number, what)
Прокручивает
Listboxпо горизонтали. Для аргументаwhatиспользуйте либоtk.UNITSдля прокрутки по символам, либоtk.PAGESдля прокрутки по страницам, то есть по ширинеListbox. Аргументnumberуказывает, сколько страниц прокручивать; отрицательные значения перемещают текст вListboxвправо, положительные - влево.
.yview()
Чтобы сделать
Listboxвертикально прокручиваемым, установите параметрcommandсвязанной вертикальной полосы прокрутки на этот метод. Смотрите Раздел 14.1, "Скроллинг виджета Listbox".
.yview_moveto(fraction)
Прокручивает
Listboxтак, чтобы верхняя часть (fraction) ширины его самой длинной строки находилась за пределами левой стороныListbox. Дробь находится в диапазоне [0,1].
.yview_scroll(number, what)
Прокручивает
Listboxпо вертикали. Для аргументаwhatиспользуйте либоtk.UNITSдля прокрутки по строкам, либоtk.PAGESдля прокрутки по страницам, то есть по высотеListbox. Аргументnumberуказывает, сколько страниц прокручивать; отрицательные значения перемещают текст вниз внутриListbox, а положительные - вверх.