Listbox

Віджет Listbox – клас списку. Це віджет, який представляє собою список, з елементів якого користувач може вибирати один або кілька пунктів.

Загальний синтаксис:

name = Listbox(window)

name – ім'я списку, window – ім'я вікна, на якому він розташовується.

Властивості віджета Listbox

Функції віджета Listbox

Спочатку список (Listbox) порожній. За допомогою циклу for в нього додаються пункти зі списку. Додавання відбувається за допомогою спеціального методу класу Listbox – insert. Даний метод приймає два параметри: куди додати і що додати.

Приклад:

list1 = ["Python", "Java", "C", "C++"]                               # задаємо елементи, які повинні потрапити у список

listbox1 = Listbox(root, height=5, width=15, selectmode=EXTENDED)    # створюємо віджет – список

for i in list1:                                                      # додаємо елементи у віджет
    listbox1.insert(END, i)

Приклади застосування

Завдання 1. Розмістити у вікні список, який містить числа від 1 до 100, та смугу прокручування. Забезпечити можливість вибору кількох елементів у списку.

Вказівка. Можливість вибору кількох елементів у списку забезпечує властивість selectmode зі значенням EXTENDED.
from tkinter import *                         # імпортування графічної бібліотеки

root = Tk()                                   # створення головного вікна

list = Listbox(root, selectmode=EXTENDED)     # створення та розміщення списку
list.pack(side=LEFT, fill=Y)

for i in range(100):                          # додавання елементів у список
    list.insert(END, str(i+1))

scroll = Scrollbar(root)                      # створення та розміщення смуги прокручування
scroll.pack(side=RIGHT, fill=Y)

scroll.config(command=list.yview)             # встановлення зв'язку між скроллером та списком
list.config(yscrollcommand=scroll.set)        # зв'язка списку з панеллю прокручування

root.mainloop()                               # задання команди відображення вікна при запуску

Завдання 2. Розмістити у вікні список з можливістю вибору одного елемента та кнопку, яка друкує обране у списку значення.

from tkinter import *                             # імпортування графічної бібліотеки

root = Tk()                                       # створення головного вікна

# функція для друку елемента списку
def f():
    print(list.get(list.curselection()))          # друкуємо вибраний елемент списку по його індексу

list = Listbox(root, selectmode=SINGLE, width=15, height=5)           # створення та розміщення списку
list.pack(side=LEFT, padx=20)

for i in ['Python', 'Java', 'C', 'C++']:                              # додавання елементів у список        
    list.insert(END, i)

butt = Button(root, text='Друкувати', command=f)                      # створення та розміщення кнопки
butt.pack(side=LEFT, padx=5)

root.mainloop()                                   # задання команди відображення вікна при запуску

Завдання 3. Розмісти у вікні два списки Listbox. У першому буде перелік товарів, заданий програмно. Другий спочатку порожній, нехай це буде перелік покупок. При кліці на одну кнопку товар повинен переходити з одного списку в інший. При кліці на другу кнопку – повертатися.

from tkinter import *                              # імпортування графічної бібліотеки

root = Tk()                                        # створення головного вікна

# функція для перенесення товару з першого списку в другий
def lbox1_to_lbox2():
    lbox2.insert(END, lbox1.get(lbox1.curselection()))
    lbox1.delete(lbox1.curselection())

# функція для перенесення товару з другого списку в перший
def lbox2_to_lbox1():
    lbox1.insert(END, lbox2.get(lbox2.curselection()))
    lbox2.delete(lbox2.curselection())


lbox1 = Listbox(root, selectmode=SINGLE)                          # створення та розміщення першого списку
lbox1.pack(side=LEFT)

for i in ['молоко', 'хліб', 'масло', 'м\'ясо', 'яйця']:           # додавання елементів у перший список
    lbox1.insert(END, i)

# створення фрейма та наповнення його кнопками
f1 = Frame(root)
button1 = Button(f1, text='>>>', command=lbox1_to_lbox2)
button1.pack(side=TOP)
button2 = Button(f1, text='<<<', command=lbox2_to_lbox1)
button2.pack(side=BOTTOM)
f1.pack(side=LEFT)

lbox2 = Listbox(root, selectmode=SINGLE)                          # створення та розміщення другого списку
lbox2.pack(side=LEFT)

root.mainloop()                                                   # задання команди відображення вікна при запуску