NameError:未定义名称“ first”,我该怎么办?

时间:2019-01-09 08:43:44

标签: python tkinter

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回调中的异常       追溯(最近一次通话):         调用中的文件“ C:\ Python34 \ lib \ tkinter__init __。py”,第1533行           返回self.func(* args)         测试中的文件“ C:/Users/lycelab18/Desktop/testt.py”,第29行           first.configure(文本= get2 + get1 + get3 + get4 + get5)       NameError:名称“ first”未定义”

4 个答案:

答案 0 :(得分:0)

test()函数中,在定义first.configure(...)变量之前,先使用first

first函数中不存在在printfirst()中定义的test()值。

答案 1 :(得分:0)

变量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)

答案 2 :(得分:0)

错误提示,def test():中未定义first 您可以像在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)

答案 3 :(得分:0)

函数first中没有名为test()的变量/对象。您需要先分配它,然后再使用它。在printfirst()中的操作方式。