2015-03-19 4 views
-1

Я пытаюсь вызвать функцию под названием Add_user из другой функции, которая называется Edit_user_admin. Я уверен, что все правильно написала, но я все равно получаю ту же ошибку.Python: <lambda> ТипError: объект «NoneType» не является вызываемым

File "G:/PVH_work/PVH_program/ParkTheReal.py", line 395, in <lambda> 
    Add_user = ttk.Button(frame_27, text="Add User", command=lambda: Add_user(frame_27, data_dictionary)).grid(row=1, column=0) 
    TypeError: 'NoneType' object is not callable 

Вот функция Edit_user_admin:

def Edit_user_admin(form_item, data_dictionary, row_num): 
    form_item.grid_forget() 
    frame_27 = Frame(gui) 
    frame_27.grid() 

    MyProfile = ttk.Button(frame_27, text="My profile", command=lambda: My_profile_admin(frame_27, data_dictionary, row_num)).grid(row=0, column=0) 
    TrainingRecord = ttk.Button(frame_27, text="Training Record", command=lambda: Training_record_admin(frame_27, data_dictionary, row_num)).grid(row=0, column=1) 
    Compare = ttk.Button(frame_27, text="Compare", command=lambda: Compare_admin(frame_27, data_dictionary, row_num)).grid(row=0, column=2) 
    EditUsers = ttk.Button(frame_27, text="Edit Users", command=lambda: Edit_user_admin(frame_27, data_dictionary, row_num)).grid(row=0, column=3) 
    Team = ttk.Button(frame_27, text="View/Edit Team", command=lambda: Team_admin(frame_27, data_dictionary, row_num)).grid(row=0, column=4) 
    Logout = ttk.Button(frame_27, text="Logout", command=lambda: Logout(frame_27)).grid(row=0, column=5) 

    Add_user = ttk.Button(frame_27, text="Add User", command=lambda: Add_user(frame_27, data_dictionary, row_num)).grid(row=1, column=0) 
    Edit_user = ttk.Button(frame_27, text="Edit User", command=lambda: Edit_user(frame_27, data_dictionary, row_num)).grid(row=1, column=1) 
    Remove_user = ttk.Button(frame_27, text="Remove User", command=lambda: Remove_user(frame_27, data_dictionary, row_num)).grid(row=1, column=2) 

А вот функция Add_user:

def Add_user(form_item, data_dictionary, row_num): 
    form_item.grid_forget() 
    frame_28 = Frame(gui) 
    frame_28.grid() 

    #Declare variables for creating a new user account 
    __Username = StringVar() 
    __Name  = StringVar() 
    __Age  = StringVar() 
    __Email  = StringVar() 
    __DoB  = StringVar() 



    MyProfile = ttk.Button(frame_28, text="My profile", command=lambda: My_profile_admin(frame_28, data_dictionary, row_num)).grid(row=0, column=0) 
    TrainingRecord = ttk.Button(frame_28, text="Training Record", command=lambda: Training_record_admin(frame_28, data_dictionary, row_num)).grid(row=0, column=1) 
    Compare = ttk.Button(frame_28, text="Compare", command=lambda: Compare_admin(frame_28, data_dictionary, row_num)).grid(row=0, column=2) 
    EditUsers = ttk.Button(frame_28, text="Edit Users", command=lambda: Edit_user_admin(frame_28, data_dictionary, row_num)).grid(row=0, column=3) 
    Team = ttk.Button(frame_28, text="View/Edit Team", command=lambda: Team_admin(frame_28, data_dictionary, row_num)).grid(row=0, column=4) 
    Logout = ttk.Button(frame_28, text="Logout", command=lambda: Logout_so(frame_28)).grid(row=0, column=5) 

Я имел эту ошибку на другие функции, но я обнаружил, что добавление «_ 'к функции, которую я пытаюсь назвать именем, а затем добавлению их расширения с тем же именем в обработанную команду.

ответ

3

Вы назначили None на номер Add_user; ttk.Button.grid() возвращается None:

Add_user = ttk.Button(...).grid(row=1, column=0) 

Вы должны не использовать то же имя для ссылки на кнопки и функции; В этом случае Python будет использовать локальную переменную, а не глобальную функцию.

Используйте другое имя, и называют .grid()отдельно:

add_user_button = ttk.Button(
    frame_27, text="Add User", 
    command=lambda: Add_user(frame_27, data_dictionary, row_num)) 
add_user_button.grid(row=1, column=0) 

То же самое относится и к другим кнопкам.

Если, однако, вы не используете add_user_button ссылку где-нибудь еще, вы можете сделать это одна линия, но вам не придется беспокоиться о присвоении результата:

ttk.Button(
    frame_27, text="Add User", 
    command=lambda: Add_user(frame_27, data_dictionary, row_num) 
).grid(row=1, column=0) 
Смежные вопросы