У меня есть два списка, которые могут перемещать элементы назад и вперед между ними с помощью кнопок. Прямо сейчас, при перемещении элементов, он взял бы индекс выбранного элемента и удалил его. Затем этот элемент будет переписан в другом поле, но вставлен внизу, а это не то, что я действительно хочу. Можно ли как-то сохранить порядок имен, используя индекс словаря при переносе его в другое поле? Например, сдвиг 3-го элемента «Joanne» до 1-го элемента «Bill» справа налево будет по-прежнему отображать 1-й элемент поверх 3-го элемента.
Я пытался использовать словарь, который можно увидеть в моем коде, но я не смог понять, как заставить его работать с помощью выбора tkinter (один из методов списка tkinter)
from tkinter import *
#Buttons to shift items in the listbox
def shift_right():
index = left_box.curselection()
for x in index [::-1]:
d = left_box.get(x)
right_box.insert(END,d)
left_box.delete(x)
def shift_right_all():
left_box.delete(0, END)
right_box.delete(0, END)
for x in dictvar:
right_box.insert(END, dictvar[x])
def shift_left():
index = right_box.curselection()
for x in index [::-1]:
d = right_box.get(x)
left_box.insert(END,d)
right_box.delete(x)
def shift_left_all():
left_box.delete(0, END)
right_box.delete(0, END)
for x in dictvar:
left_box.insert(END, dictvar[x])
root = Tk()
root.geometry('330x200')
names = ['Bill', 'Jack', 'Joanne', 'Ann', 'Dave', 'Jane']
dictvar = { i : names[i] for i in range(0, len(names))}
left_box = Listbox(root, activestyle = 'none', highlightthickness = 0)
left_box.place(x=5, y=5)
right_button = Button(root, text=' > ', command = shift_right)
right_button.place(x=148, y=5)
right_all_button = Button(root, text='>>', command = shift_right_all)
right_all_button.place(x=148, y=55)
left_button = Button(root, text=' < ', command = shift_left)
left_button.place(x=148, y=105)
left_all_button = Button(root, text='<<', command = shift_left_all)
left_all_button.place(x=148, y=155)
right_box = Listbox(root, activestyle = 'none', highlightthickness = 0)
for x in dictvar:
right_box.insert(END, dictvar[x])
right_box.place(x=200, y=5)
root.mainloop()