NameError: имя 'first' не определено. Что я могу сделать? - PullRequest
0 голосов
/ 09 января 2019
from tkinter import *
root = Tk()
root.geometry("400x400")
root.title("Bubble Sort")

def printfirst():
    get1 = w.get()
    get2 = e.get()
    get3 = r.get()
    get4 = t.get()
    get5 = y.get()
    first = Label(root, text= get1 + get2 + get3 + get4 + get5)
    first.pack()

def test():
    get1 = w.get()
    get2 = e.get()
    get3 = r.get()
    get4 = t.get()
    get5 = y.get()
    if get1 > get2:
        first.configure(text= get2 + get1 + get3 + get4 + get5)

te = Label(root, text="Enter 5 Diffrent Numbers")
te.pack()
w = Entry(root)
get1 = w.get()
w.pack()
e = Entry(root)
get2 = e.get()
e.pack()
r = Entry(root)
get3 = r.get()
r.pack()
t = Entry(root)
get4 = t.get()
t.pack()
y = Entry(root)
get5 = y.get()
y.pack()
p = Button(root, text="Print Out", command=printfirst)
p.pack()

gg = Button(root, text="Sort It!", command=test)
gg.pack()

root.mainloop()

Журнал ошибок:

"Исключение в обратном вызове Tkinter Traceback (последний вызов был последним): Файл "C: \ Python34 \ lib \ tkinter__init __. Py", строка 1533, в вызов вернуть self.func (* аргументы) Файл "C: /Users/lycelab18/Desktop/testt.py", строка 29, в тесте first.configure (text = get2 + get1 + get3 + get4 + get5) NameError: имя 'first' не определено "

Ответы [ 4 ]

0 голосов
/ 09 января 2019

В функции test() нет переменной / объекта с именем first. Вы должны назначить его перед использованием. Как вы делаете в printfirst().

0 голосов
/ 09 января 2019

Переменная first существует только в области действия функции printfirst(), это означает, что вы не можете получить к ней доступ из области действия test().

Один из способов решить эту проблему - return first из функции printfirst(), сохранить эту переменную и затем передать ее в качестве аргумента во втором методе; test(first)

Это будет выглядеть так:

def printfirst():
    get1 = w.get()
    get2 = e.get()
    get3 = r.get()
    get4 = t.get()
    get5 = y.get()
    first = Label(root, text= get1 + get2 + get3 + get4 + get5)
    first.pack()
    return first

def test(first):
    get1 = w.get()
    get2 = e.get()
    get3 = r.get()
    get4 = t.get()
    get5 = y.get()
    if get1 > get2:
        first.configure(text= get2 + get1 + get3 + get4 + get5)

first = printfirst()
test(first)
0 голосов
/ 09 января 2019

Как показывает ошибка, сначала не определено в def test(): Вы можете определить и инициализировать его, как вы это сделали в def printfirst

def test():
    get1 = w.get()
    get2 = e.get()
    get3 = r.get()
    get4 = t.get()
    get5 = y.get()
    # If this is how you want to initialise it
    first = Label(root, text= get1 + get2 + get3 + get4 + get5)
    first.pack()
    if get1 > get2:
         first.configure(text= get2 + get1 + get3 + get4 + get5)
0 голосов
/ 09 января 2019

В вашей функции test() вы используете first.configure(...), прежде чем определить first var.

Вы first значение, определенное в printfirst(), не существует в функции test().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...