Проблема с графическим интерфейсом

from tkinter import *
from tkinter import messagebox as mb
import modul
 
 
def add_window():
    def add():
        surname = en1.get()
        name = en2.get()
        number = en3.get()
        date = en4.get()
 
        peoples.add(surname, name, number, date)
 
    add_w = Toplevel()
    add_w.title('Добавить')
    add_w.resizable(False, False)
    add_w.geometry('400x200')
    en1 = Entry(add_w)
    en2 = Entry(add_w)
    en3 = Entry(add_w)
    en4 = Entry(add_w)
    lb1 = Label(add_w, text="Откуда")
    lb2 = Label(add_w, text="Куда")
    lb3 = Label(add_w, text="Номер поезду")
    lb4 = Label(add_w, text="Дата выезда")
    bt1 = Button(add_w, text="Добавить", command=add)
 
    lb1.grid(row=0, column=0)
    lb2.grid(row=1, column=0)
    lb3.grid(row=2, column=0)
    lb4.grid(row=3, column=0)
    en1.grid(row=0, column=1)
    en2.grid(row=1, column=1)
    en3.grid(row=2, column=1)
    en4.grid(row=3, column=1)
    bt1.grid(row=4, column=0, columnspan=2)
 
 
def load_window():
    def load_f(en4=None):
        peoples.load(en4.get())
        load_w.destroy()
 
    load_w = Toplevel()
    load_w.title('Сохранение')
    load_w.resizable(False, False)
    load_w.geometry('225x100')
    lb5 = Label(load_w, text="Введите название файла")
    en5 = Entry(load_w)
    bt3 = Button(load_w, text="Загрузить", command=load_f)
    lb5.pack(padx=2, pady=2)
    en5.pack(padx=2, pady=2)
    bt3.pack(padx=2, pady=2)
 
 
def save_window():
    def save_f():
        peoples.save(en5.get())
        save_w.destroy()
 
    save_w = Toplevel()
    save_w.title('Сохранение')
    save_w.resizable(False, False)
    save_w.geometry('225x100')
    lb5 = Label(save_w, text="Введите название файла")
    en5 = Entry(save_w)
    bt3 = Button(save_w, text="Сохранить", command=save_f)
    lb5.pack(padx=2, pady=2)
    en5.pack(padx=2, pady=2)
    bt3.pack(padx=2, pady=2)
 
 
def help_window():
    help_w = Toplevel()
    help_w.title('Помощь')
    help_w.resizable(False, False)
    help_w['bg'] = 'white'
    img = PhotoImage(file='1.png')
    bt2 = Button(
        help_w,
        image=img,
        bg='white',
        borderwidth=0,
        activebackground='white',
        command=lambda: help_w.destroy()
    )
    bt2.image = img
    bt2.pack()
 
 
def select_window():
    def choice():
        try:
            choice_en = int(en1.get())
            res = peoples.select(choice_en)
            if res:
                for idx, people in enumerate(res, 1):
                    text.delete(0.0, END)
                    text.insert(0.0, '{:<20}: {}'.format(idx, people.surname))
            else:
                text.delete(0.0, END)
                text.insert(0.0, 'Нет поездов до такого города')
        except(ValueError, TypeError):
            mb.showinfo("Выбор направления",
                        "Введите направление !")
 
    sel_w = Toplevel()
    sel_w.title('Выбрать')
    sel_w.resizable(False, False)
    sel_w.geometry('225x100')
    lb5 = Label(sel_w, text="Введите направление")
    en1 = Entry(sel_w)
    bt3 = Button(sel_w, text="Подтвердить", command=choice)
    lb5.pack(padx=2, pady=2)
    en1.pack(padx=2, pady=2)
    bt3.pack(padx=2, pady=2)
 
 
def show():
    text.delete(0.0, END)
    text.insert(0.0, peoples)
 
 
if __name__ == '__main__':
    peoples = modul.Peoples()
 
    root = Tk()
    root.geometry('800x450')
    root.title('Главное окно')
    root.resizable(False, False)
 
    main_menu = Menu(root)
    root.config(menu=main_menu)
 
    file_menu = Menu(main_menu, tearoff=0)
    file_menu.add_command(label="Открыть", command=load_window)
    file_menu.add_command(label="Добавить", command=add_window)
    file_menu.add_command(label="Сохранить", command=save_window)
 
    main_menu.add_cascade(label="Файл", menu=file_menu)
    main_menu.add_command(label="Показать", command=show)
    main_menu.add_command(label="Выбрать", command=select_window)
    main_menu.add_command(label="Помощь", command=help_window)
    main_menu.add_command(label="Выход", command=lambda: root.destroy())
 
    text = Text(bg='white', width=97, height=100)
    text.pack(side=LEFT)
    scroll = Scrollbar(command=text.yview)
    scroll.pack(side=LEFT, fill=Y)
    text.config(yscrollcommand=scroll.set)
 
    root.mainloop()

не работает кнопка сохранить и открыть,при открыть упирается в 70 и 133,в при сохранить в 53 строку,как исправить это?
modul.rar (1.2 КБ)

Так а выдает что, какой текст ошибок?

en4 тут никто не передает, вот он и None.

Как вариант можно просто сделать эти переменные

глобальными. Python 3 — глобальные и локальные переменные: область видимости функций

(и убрать en4=None в параметрах функции)

а как их и куда можно без искажения вставить,сколько сейчас пробовал,никак не вышло,хотя материал просматривал

en4 = None

def add_window():
    ...
    global en4
    en4 = Entry(add_w)
def load_window():
    def load_f():
        peoples.load(en4.get())
def add_window():
    # noinspection PyUnboundLocalVariable
    def add():
        surname = en1.get()
        name = en2.get()
        number = en3.get()
        date = en4.get()

        peoples.add(surname, name, number, date)
        # noinspection PyGlobalUndefined
        global en5
        en5 = Entry(add_w)

    add_w = Toplevel()
    add_w.title('Добавить')
    add_w.resizable(False, False)
    add_w.geometry('400x200')
    en1 = Entry(add_w)
    en2 = Entry(add_w)
    en3 = Entry(add_w)
    # noinspection PyShadowingNames
    en4 = Entry(add_w)
    lb1 = Label(add_w, text="Откуда")
    lb2 = Label(add_w, text="Куда")
    lb3 = Label(add_w, text="Номер поезду")
    lb4 = Label(add_w, text="Дата выезда")
    bt1 = Button(add_w, text="Добавить", command=add)

    lb1.grid(row=0, column=0)
    lb2.grid(row=1, column=0)
    lb3.grid(row=2, column=0)
    lb4.grid(row=3, column=0)
    en1.grid(row=0, column=1)
    en2.grid(row=1, column=1)
    en3.grid(row=2, column=1)
    en4.grid(row=3, column=1)
    bt1.grid(row=4, column=0, columnspan=2)


def load_window():
    # noinspection PyUnresolvedReferences
    def load_f():
        peoples.load(en4.get())
        load_w.destroy()

    load_w = Toplevel()
    load_w.title('Сохранение')
    load_w.resizable(False, False)
    load_w.geometry('225x100')
    lb5 = Label(load_w, text="Введите название файла")
    # noinspection PyShadowingNames
    en5 = Entry(load_w)
    bt3 = Button(load_w, text="Загрузить", command=load_f)
    lb5.pack(padx=2, pady=2)
    en5.pack(padx=2, pady=2)
    bt3.pack(padx=2, pady=2)

снова ругается,но только на другие строчки

Ну так надо читать ошибки и разбираться с ними пока не перестанет ругаться ))

это да,но блин,требуется чтобы ещё всё работало,а как это сделать фиг знает,поэтому сюда и обратился за помощью

теперь он вот на что жалуется

И где тут это?

dasda.rar (2.8 КБ)
чуть изменил код,можешь глянуть,почему сохранение не идёт,всё работает кроме него

Так а выдает-то что?

ShooterScreenshot-5-24-05-21


а при загрузке вот это

Так а поменялось-то что? en5 всё так же недоступен в load_f.
Почему б не сделать как тут? Проблема с графическим интерфейсом - #6 от пользователя AlexP

    try:
        peoples.save(file_name)
    except Exception as e:
        print(e)
        mb.showinfo("Сохранение файла",
                    "Файл не сохранен!")

и напишет почему.