Некорректно работает функция в виджете listbox() (tkinter)

Задача следующая : нужно создать программу для составления графика работы . На данном этапе в tkinter есть несколько виджетов listbox() , один из которых предназначен для вывода списков работников (загружается с базы данных) , другие для рабочих смен (Воскресенье утро вечер , понедельник и т.д ). Я нажимаю на виджет с рабочей сменой , в виджете со списком работников выводятся имена сотрудников , затем при клике на второй виджет имена переносятся на первый . Проблема в том ,что при нескольких обращениях к этой функции (каждое обращение создаёт новую рабочую смену ) , работает только последнее . Почему - понять не могу. Сразу извиняюсь за некорректный код - я новичок в Питоне , я постарался закомментить все шаги , которые делал в программе . вот код

from tkinter import *
import sqlite3
#Загрузка базы данных 
db=sqlite3.connect('server.db')
sql = db.cursor()
def Sch_for(_gl, _w , _w1):
    _w.delete(0, 100)
    for i in _w1:
        if i in _gl:
            pass
        else:
            _w.insert(END,i)    
def Sch1(event ,_s,  gl , _w):
    select = _w.curselection()
    if select:
        gl.append(_w.get(select[0]))
        _w.delete(select[0])
    gl.sort()
    _s.delete(0 , 100)
    for i in gl:
        _s.insert(END,i)
def Sch(event,s, w1, w):
#Создаём список имён для рабочей смены . Так как смен будет несколько , то при каждом обращении нужно создавать уникальный список.
    try :
        globals()['{0}1'.format(s)]
    except Exception:
        globals()['{0}1'.format(s)] = []
#Eщё одна функция : удаляет всю информацию с виджета и выводит её заново на основе соответствующих списков
    Sch_for(globals()['{0}1'.format(s)], w , w1)
#обрабатываем событие : нажатие на listbox() списка работников , при нажатии он переносит имя работника с виджета списков работника в виджет рабочей смены
    w.bind ('<<ListboxSelect>>' ,lambda btn , _s = s , gl = globals()['{0}1'.format(s)] , _w = w : Sch1(btn,_s,gl,_w))
    select = s.curselection()
    if select:
        globals()['{0}1'.format(s)].remove(s.get(select[0]))
        s.delete(select[0])
        Sch_for(globals()['{0}1'.format(s)], w , w1)
#Основная часть функции
class Schedule_process:
    def __init__(self, master,x,y):
#Создаём список , если он ещё не был создан , загружаем информацию из базы данных
        try:
            work
        except Exception:
            work = Listbox()
            work.grid (row = 3 , column = 7)
            work_list = []
            for i in sql.execute("SELECT name FROM users"):
                work_list.append(i)
        self = Listbox(width = 15 , height = 8)
        self.grid(row = x , column =y)
#В случае клика запускаем обработку события, передаём в функцию виджет рабочей смены Listbox() , созданный список имён , виджет со списком работников Listbox()
        self.bind('<<ListboxSelect>>' ,lambda btn ,s = self , wl = work_list, w = work: Sch(btn,s, wl, w))
#В качестве примера берём 3 смены : Воскресенье утро вечер и понедельник утро
root= Tk()
filemenu = Menu(root)
root.config(menu=filemenu)
Sunday_m = Schedule_process(root, 1,1)
Sunday_e = Schedule_process(root, 1,2)
Monday_m = Schedule_process(root, 2,1)
root.mainloop()


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