Задать вопрос
@chermett

Как пофиксить ошибку в python с def?

Здравствуйте, столкнулся с такой ошибкой, еще новичок, разбираюсь.
В чём суть: я установил одну кнопку которая перекидывает на команду "znachenie", там создаётся окно, так же там есть кнопка, которая перекидывает на другую команду"znach", и питон не видит данные введенные в entry11 и entry_11.
Вопрос: Как сделать, что бы при нажатии кнопки срабатывала команда кнопки "znach" и данные в entry11 и entry_11 видел питон? Ниже прикладываю код и ошибку:

from tkinter import*
from tkinter import messagebox as mb

def znach():
    c=entry11.get();c1=entry_11.get()
    if not c.isdigit() or not c1.isdigit():
        mb.showerror('ошибка','должны быть введены числа!')
        b.after(0, lambda: a.destroy())
    else:
        print('petwekgsdgwq')
            
def znachenie():
    b=entry1.get();b_1=entry2.get();b_2=entry3.get();b_3=entry4.get();b_4=entry5.get();b_5=entry6.get();b_6=entry7.get()
    a = Toplevel()
    a.overrideredirect(True)
    a.resizable(width=True, height=True)
    a.title('gre')
    a['bg']='white'
    a.overrideredirect(False)
    a.geometry("1000x768+200+0")
    if not b.isdigit() or not b_1.isdigit() or not b_2.isdigit() or not b_3.isdigit() or not b_4.isdigit() or not b_5.isdigit() or not b_6.isdigit():
        mb.showerror('ошибка','должны быть введены числа!')
        a.after(30, lambda: a.destroy())
    b=float(b); b_1=float(b_1);b_2=float(b_2);b_3=float(b_3);b_4=float(b_4);b_5=float(b_5);b_6=int(b_6);
    frame2=Frame(a,bg='white')
    frame2.place(x=112,y=0,width=450,height=900)
    title=Label(frame2,text='Результаты испытаний:',font='Times 10',bg='white')
    title.place(x=3,y=2)
    d=9
    if b_6>0:
        title=Label(frame2,text='1-е испытание', font='Times 10',bg='white')
        title.place(x=7,y=50)
        entry11=Entry(frame2,width=15,bg='#c9c9c9')
        entry11.place(x=25,y=75)
        entry_11=Entry(frame2,width=15,bg='#c9c9c9')
        entry_11.place(x=25,y=95)
        title=Label(frame2,text='S=', font='Times 10',bg='white')
        title.place(x=7,y=75)
        title=Label(frame2,text='k=', font='Times 10',bg='white')
        title.place(x=8,y=95)
        btn=Button(frame2,text='Рассчитать',bg='white', font='Times 10',command=znach)
        btn.place(x=5,y=20)

root = Tk()

root.title("uhofwd")
root.geometry("200x280")
root.overrideredirect(False)
root.resizable(width=False, height=False)

title1=Label(root,text='Xттз₁=',font='Times 12')
title1.place(x=2)
entry1=Entry(root,width=15)
entry1.place(x=50,y=5)

title2=Label(root,text='∆X₁=',font='Times 12')
title2.place(x=13,y=35)
entry2=Entry(root,width=15)
entry2.place(x=50,y=40)

title3=Label(root,text='Xттз₂=',font='Times 12')
title3.place(x=2,y=70)
entry3=Entry(root,width=15)
entry3.place(x=50,y=75)

title4=Label(root,text='∆X₂=',font='Times 12')
title4.place(x=13,y=105)
entry4=Entry(root,width=15)
entry4.place(x=50,y=110)

title5=Label(root,text='α=',font='Times 15')
title5.place(x=26,y=140)
entry5=Entry(root,width=15)
entry5.place(x=50,y=145)

title6=Label(root,text='β=',font='Times 15')
title6.place(x=26,y=175)
entry6=Entry(root,width=15)
entry6.place(x=50,y=180)

title7=Label(root,text='m=',font='Times 15')
title7.place(x=26,y=210)
entry7=Entry(root,width=15)
entry7.place(x=50,y=215)

btn=Button(root, text='рассчитать',bg='white',font='Times 10', command=znachenie)
btn.place(x=125,y=250)

root.mainloop()


Ошибка:
line 5, in znach
    c=entry11.get();c1=entry_11.get()
NameError: name 'entry11' is not defined
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Почитай про области видимости. Из одной функции не получится увидеть область видимости другой.
Как вариант сделать проброс значений в функцию, например так:

def znach(entry11, entry_11):
    ...

def znachenie():
    ...
    btn=Button(frame2,text='Рассчитать',bg='white', font='Times 10',command=lambda: znach(entry11,  entry_11))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы