Списки Listbox
Віджет Listbox призначений для відображення списку значень, їх вибору або зміни користувачем. Listbox буде відображено завжди відкритим.
Для відображення списку і вікні використовуємо такий запис:
lb=Listbox(width=12, height=8)
lb.pack()
Заповнення Listbox елементами:
Створити список і за допомогою циклу заповнити Listbox елементами списку
a=[1,2,3,4]
lb=Listbox( width=12, height=8)
for a in a:
lb.insert(END,a)
lb.pack()
Введення з клавіатури:
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()