Виджет Listbox (текстовый список) в Tkinter

Работа с виджетом Listbox (текстовый список) в Tkinter

Listbox — это виджет, доступный в библиотеке Tkinter, который отображает список строк на пользовательском интерфейсе. Виджет Listbox позволяет пользователю выбирать одну или несколько опций из списка.

Создание виджета Listbox

Виджет Listbox создается с помощью конструктора Listbox(), который принимает родительский виджет в качестве параметра.

import tkinter as tk

root = tk.Tk()

listbox = tk.Listbox(root)
listbox.pack()

root.mainloop()

Этот код создает виджет Listbox, который пока еще пуст. Чтобы добавить элементы в Listbox, мы можем использовать метод insert().

listbox.insert(tk.END, "Item 1")

Метод insert() принимает два параметра: индекс, где нужно вставить новый элемент, и сам элемент. tk.END — это константа, которая ссылается на последний элемент в списке, поэтому новый элемент добавляется в конец списка.

Свойства виджета Listbox

Виджет Listbox имеет ряд свойств, которые позволяют контролировать его внешний вид и поведение.

  • bg: Устанавливает цвет фона виджета.
  • fg: Устанавливает цвет текста виджета.
  • font: Устанавливает шрифт текста.
  • height: Устанавливает высоту виджета (в строках).
  • width: Устанавливает ширину виджета (в символах).
  • selectmode: Устанавливает режим выбора элементов. Это может быть SINGLE (можно выбрать только один элемент), BROWSE (один элемент, но можно выбирать, прокручивая), MULTIPLE (можно выбрать несколько элементов) или EXTENDED (можно выбрать несколько элементов, а также использовать Shift и Ctrl для выбора).

Пример использования свойств:

listbox = tk.Listbox(root, bg='blue', fg='white', font=('Arial', 16), height=5, width=20, selectmode=tk.MULTIPLE)

Методы виджета Listbox

В дополнение к общим методам виджетов Tkinter, таким как pack() и grid(), Listbox также имеет некоторые специфичные методы:

  • insert(index, *elements): Вставляет элементы в указанный индекс.
  • delete(first, last=None): Удаляет элементы из списка. Может удалить один элемент или диапазон элементов.
  • get(first, last=None): Возвращает элементы из списка. Может получить один элемент или диапазон элементов.
  • curselection(): Возвращает кортеж, содержащий индексы выбранных элементов.
  • size(): Возвращает количество элементов в списке.
  • index(i): Возвращает индекс элемента в списке.
  • see(index): Проскроллите список так, чтобы элемент с указанным индексом был видимым.
  • activate(index): Устанавливает элемент с указанным индексом в качестве активного. Активный элемент выделяется, когда виджет получает фокус.

Пример использования Listbox

import tkinter as tk

def show_selection():
    selected_indices = listbox.curselection()
    for i in selected_indices:
        print(listbox.get(i))

root = tk.Tk()

listbox = tk.Listbox(root, selectmode=tk.MULTIPLE)
listbox.pack()

items = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"]

for item in items:
    listbox.insert(tk.END, item)

button = tk.Button(root, text="Show Selection", command=show_selection)
button.pack()

root.mainloop()

В этом примере мы создаем виджет Listbox и заполняем его пятью элементами. Затем мы создаем кнопку, которая, когда на нее нажимают, выводит выбранные пользователем элементы.

Прокрутка в Listbox

Также можно добавить, что виджет Listbox в Tkinter поддерживает прокрутку с помощью другого виджета — Scrollbar. Это особенно полезно, когда у вас в списке слишком много элементов, чтобы уместиться в одном окне.

Ниже приведен пример, как можно использовать Scrollbar вместе с Listbox:

import tkinter as tk

root = tk.Tk()

scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

listbox = tk.Listbox(root, yscrollcommand=scrollbar.set)
for i in range(100):
    listbox.insert(tk.END, f"Item {i + 1}")
listbox.pack(side=tk.LEFT, fill=tk.BOTH)

scrollbar.config(command=listbox.yview)

root.mainloop()

В этом коде мы сначала создаем Scrollbar, затем Listbox. В Listbox мы передаем yscrollcommand=scrollbar.set, что говорит Listbox обновить положение ползунка на Scrollbar каждый раз, когда изменяется прокрутка в Listbox. Затем мы добавляем 100 элементов в Listbox. После этого мы связываем прокрутку Scrollbar с прокруткой Listbox с помощью метода config().

Помимо этого, в Listbox можно добавлять не только строки, но и виджеты, например, Checkbuttons или Radiobuttons, создавая таким образом динамические интерактивные списки.

Таким образом, виджет Listbox в Tkinter является универсальным инструментом для создания списков в пользовательском интерфейсе.

Вывод

Виджет Listbox является полезным инструментом для предоставления пользователю возможности выбрать из списка опций. Он обладает большим количеством свойств и методов, которые позволяют контролировать его внешний вид и поведение, делая его мощным инструментом для создания пользовательских интерфейсов в Tkinter.

Содержание: