Списки Listbox


Віджет Listbox призначений для відображення списку значень, їх вибору або зміни користувачем. Listbox буде відображено завжди відкритим.

Для відображення списку і вікні використовуємо такий запис:

lb=Listbox(width=12, height=8)

lb.pack()

Заповнення Listbox елементами:

  1. Створити список і за допомогою циклу заповнити Listbox елементами списку

a=[1,2,3,4]

lb=Listbox( width=12, height=8)

for a in a:

lb.insert(END,a)

lb.pack()

  1. Введення з клавіатури:

a=[]

n=int(input("Введіть кількість елементів масиву"))

lb=Listbox( width=12, height=8)

for і in range(n):

x=int(input("Введіть елемент масиву"))

a.append(x)

for a in a:

lb.insert(END,a)

lb.pack()

Часто вміст списку не помішається в Listbox. Тоді ми застововуємо смугу прокручування Scrollbar. Щоб смуга розташувалася не нижче у вікні її застосовують наступним чином: Спосатку створюється список (box), потім смуга прокручування (scroll), яка прив'язується з допомогою опції command до смуги прокручування box по вертикальній осі (yview). Далі смуга прокручування змінюється за допомогою методу config: встановлюється значення опції в yscrollcommand.

scroll=Scrollbar(command=box.yview)

scroll.pack(side=LEFT, fill=Y)

box.config(yscrollcommand=scroll.set)

Методи класу Listbox:

get() - взяти текст з текстового поля

insert() - вставити текст

delete(0, END) - видалити текст з 0 символу до кінця

curselection ()- виводить в вигляді кортежу індекси вибраних елементів

pack()- показати

Властивості(атрибути) класу Listbox:

selectmode-визначає скільки елементів(рядків) можна вибрати(виділити)

- EXTENDED-будь-яка кількість рядків

- SINGLE- один рядок

Методи у Python записуються наступним чином:

box = Listbox(selectmode=EXTENDED)

Функції у Python записуються наступним чином:

box.insert(END, entry.get())


Приклад1. Створити вікно з полем для введення, списком і двома кнопками "Додати" і "Видалити" для додавання і видалення елементів списку.

Введіть в список 5 назв кольорів.

from tkinter import *

def add_item():

box.insert(END, entry.get())

entry.delete(0, END)

def del_list():

select = list(box.curselection())

select.reverse()

for i in select:

box.delete(i)

root=Tk()

box =Listbox(selectmode=EXTENDED)

box.pack(side=LEFT)

scroll=Scrollbar(command=box.yview)

scroll.pack(side=LEFT, fill=Y)

box.config(yscrollcommand=scroll.set)


f = Frame()

f.pack(side=LEFT, padx=10)

entry = Entry(f)

entry.pack(anchor=N)

Button(f, text="Додати", command=add_item)\

.pack(fill=X)

Button(f, text="Видалити", command=del_list)\

.pack(fill=X)

root.mainloop()

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


Приклад2. Створити вікно з двома списками і двома кнопками ">>>" і "<<<" для додавання і видалення елементів списку з одного спивку до іншого і навпаки.

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()