Как получить информацию из выделенных объектов и отправить их на второй список?

Напишите программу, состоящую из двух списков Listbox. В первом будет, например, перечень товаров, заданный программно. Второй изначально пуст, пусть это будет перечень покупок. При клике на одну кнопку товар должен переходить из одного списка в другой. При клике на вторую кнопку – возвращаться (человек передумал покупать). Предусмотрите возможность множественного выбора элементов списка и их перемещения.

image

У меня не получилось добавить действие к кнопкам.

from tkinter import *
from tkinter.ttk import *

def toSecond():
    selectToSecond = list(lbox1.curselection())
    selectToSecond.reverse()
    lbox2.insert(END, selectToSecond.get())
    for i in select:
        lbox1.delete(i)

def toFirst():
    selectToFirst = list(lbox2.curselection())
    selectToFirst.reverse()
    lbox1.insert(END, selectToFirst.get())
    for i in select:
        lbox2.delete(i)


root = Tk()

lbox1 = Listbox(selectmode=EXTENDED)

for i in ('pineapple','potato','meat','butter','bread','carrot','bananas','apple'):
    lbox1.insert(0,i)

lbox1.pack(side=LEFT)

lbox2 = Listbox(selectmode=EXTENDED)
lbox2.pack(side=RIGHT)

f = Frame()
f.pack(side=LEFT, padx=10)
Button(f, text=">>>", command=toSecond).pack(fill=X)
Button(f, text="<<<", command=toFirst).pack(fill=X)

root.mainloop()

Ответы (1 шт):

Автор решения: insolor

selectToSecond, selectToFirst - это списки индексов выделенных элементов, т.е. просто списки чисел. У списков нет метода get, который вы пытаетесь от них вызвать, и из списка чисел нельзя просто каким-то магическим способом получить выделенные в Listbox элементы. Нужно по этим индексам пройти циклом, по каждому индексу из Listbox получать сам выделенный элемент, его уже добавлять в другой Listbox:

def toSecond():
    selectToSecond = lbox1.curselection()

    for i in selectToSecond:
        lbox2.insert(END, lbox1.get(i))

    for i in reversed(selectToSecond):
        lbox1.delete(i)


def toFirst():
    selectToFirst = lbox2.curselection()

    for i in selectToFirst:
        lbox1.insert(END, lbox2.get(i))

    for i in reversed(selectToFirst):
        lbox2.delete(i)
→ Ссылка