Listbox
Элемент Listbox в tkinter представляет список объектов. Определим простой список:
from tkinter import *
languages = ["Python", "JavaScript", "C#", "Java"]
root = Tk()
root.title("GUI на Python")
root.geometry("300x280")
languages_listbox = Listbox()
for language in languages:
languages_listbox.insert(END, language)
languages_listbox.pack()
root.mainloop()
Для настройки виджета Listbox мы можем указать в его конструкторе следующие параметры:
bg: фоновый цвет
bd: толщина границы вокруг элемента
cursor: курсор при наведении на Listbox
font: настройки шрифта
fg: цвет текста
height: высота элемента в строках. По умолчанию отображает 10 строк
highlightcolor: цвет элемента, когда он получает фокус
highlightthickness: толщина границы элемента, когда он находится в фокусе
relief: устанавливает стиль элемента, по умолчанию имеет значение SUNKEN
selectbackground: фоновый цвет для выделенного элемента
selectmode: определяет, сколько элементов могут быть выделены. Может принимать следующие значения: BROWSE, SINGLE, MULTIPLE, EXTENDED. Например, если необходимо включить множественное выделение элементов, то можно использовать значения MULTIPLE или EXTENDED.
width: устанавливает ширину элемента в символах. По умолчанию ширина - 20 символов
xscrollcommand: задает горизонтальную прокрутку
yscrollcommand: устанавливает вертикальную прокрутку
from tkinter import *
languages = ["Python", "JavaScript", "C#", "Java", "C/C++", "Swift",
"PHP", "Visual Basic.NET", "F#", "Ruby", "Rust", "R", "Go",
"T-SQL", "PL-SQL", "Typescript"]
root = Tk()
root.title("GUI на Python")
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
languages_listbox = Listbox(yscrollcommand=scrollbar.set, width=40)
for language in languages:
languages_listbox.insert(END, language)
languages_listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=languages_listbox.yview)
root.mainloop()
Основные методы Listbox
Listbox имеет ряд методов для управления поведением элемента и его содержимым. Некоторые из них:
curselection(): возвращает набор индексов выделенных элементов
delete(first, last = None): удаляет элементы с индексами из диапазона [first, last]. Если второй параметр опущен, то удаляет только один элемент по индексу first.
get(first, last = None): возвращает кортеж, который содержит текст элементов с индексами из дипазона [first, last]. Если второй параметр опущен, возвращается только текст элемента с индексом first.
insert(index, element): вставляет элемент по определенному индексу
size(): возвращает количество элементов
Для рассмотрения этих методов напишем небольшой скрипт по управлению данными:
from tkinter import *
# удаление выделенного элемента
def delete():
selection = languages_listbox.curselection()
# мы можем получить удаляемый элемент по индексу
# selected_language = languages_listbox.get(selection[0])
languages_listbox.delete(selection[0])
# добавление нового элемента
def add():
new_language = language_entry.get()
languages_listbox.insert(0, new_language)
root = Tk()
root.title("GUI на Python")
# текстовое поле и кнопка для добавления в список
language_entry = Entry(width=40)
language_entry.grid(column=0, row=0, padx=6, pady=6)
add_button = Button(text="Добавить", command=add).grid(column=1, row=0, padx=6, pady=6)
# создаем список
languages_listbox = Listbox()
languages_listbox.grid(row=1, column=0, columnspan=2, sticky=W+E, padx=5, pady=5)
# добавляем в список начальные элементы
languages_listbox.insert(END, "Python")
languages_listbox.insert(END, "C#")
delete_button = Button(text="Удалить", command=delete).grid(row=2, column=1, padx=5, pady=5)
root.mainloop()