Python 从入口获取数据

Python 从入口获取数据,python,tkinter,Python,Tkinter,我有一段代码,类似这样: def topLevel(): bugsendwindows = Toplevel(background="grey") bugsendwindows.title("report bug") buglabel1 = Label(bugsendwindows, text='title', background="white") buglabel1.place(x=10, y=20) bugtitleentry = Entry(bug

我有一段代码,类似这样:

def topLevel():
    bugsendwindows = Toplevel(background="grey")
    bugsendwindows.title("report bug")
    buglabel1 = Label(bugsendwindows, text='title', background="white")
    buglabel1.place(x=10, y=20)
    bugtitleentry = Entry(bugsendwindows)
    bugtitleentry.place(x=50, y=20)
    bugtitleentry.focus_set()
    buglabel2 = Label(bugsendwindows, text="email", background="white")
    buglabel2.place(x=10, y=60)
    bugemailentry = Entry(bugsendwindows)
    bugemailentry.place(x=60, y=60)
    bugemailentry.focus_set()
    buglabel3 = Label(bugsendwindows, text="data", background="white")
    buglabel3.place(x=10, y=100)
    bugdataentry = Entry(bugsendwindows)
    bugdataentry.place(x=60, y=100, height=60)
    bugdataentry.focus_set()
    def Enter():
        global bugtitleentry
        global bugemail
        global bugdata
        bugtitle = bugtitleentry
        bugemail = bugemailentry
        bugdata = bugdataentry
        localtime = time.asctime(time.localtime(time.time()))
        bugwrite = open("bugreport", "w")
        bugwrite.write("title:")
        bugwrite.write(bugtitle, "\n")
        bugwrite.write("writer email:")
        bugwrite.write(bugemail, "\n")
        bugwrite.write("data:")
        bugwrite.write(bugdata, "\n")
        bugwrite.close()

    bugsend = Button(bugsendwindows, text="send",
        command=Enter)
    bugsend.place(x=10, y=150)
bugtitle = bugtitleentry
NameError: global name 'bugtitleentry' is not defined
但是,每次单击“发送”时,它都会显示如下内容:

def topLevel():
    bugsendwindows = Toplevel(background="grey")
    bugsendwindows.title("report bug")
    buglabel1 = Label(bugsendwindows, text='title', background="white")
    buglabel1.place(x=10, y=20)
    bugtitleentry = Entry(bugsendwindows)
    bugtitleentry.place(x=50, y=20)
    bugtitleentry.focus_set()
    buglabel2 = Label(bugsendwindows, text="email", background="white")
    buglabel2.place(x=10, y=60)
    bugemailentry = Entry(bugsendwindows)
    bugemailentry.place(x=60, y=60)
    bugemailentry.focus_set()
    buglabel3 = Label(bugsendwindows, text="data", background="white")
    buglabel3.place(x=10, y=100)
    bugdataentry = Entry(bugsendwindows)
    bugdataentry.place(x=60, y=100, height=60)
    bugdataentry.focus_set()
    def Enter():
        global bugtitleentry
        global bugemail
        global bugdata
        bugtitle = bugtitleentry
        bugemail = bugemailentry
        bugdata = bugdataentry
        localtime = time.asctime(time.localtime(time.time()))
        bugwrite = open("bugreport", "w")
        bugwrite.write("title:")
        bugwrite.write(bugtitle, "\n")
        bugwrite.write("writer email:")
        bugwrite.write(bugemail, "\n")
        bugwrite.write("data:")
        bugwrite.write(bugdata, "\n")
        bugwrite.close()

    bugsend = Button(bugsendwindows, text="send",
        command=Enter)
    bugsend.place(x=10, y=150)
bugtitle = bugtitleentry
NameError: global name 'bugtitleentry' is not defined

如何修复它,以便Enter可以从topLevel将数据写入文件?

由于
Enter
嵌套在
topLevel
中,它将从闭包中提取这些名称,并且不需要
全局
语句

# ... <snip>
def Enter():
    bugtitle = bugtitleentry
    bugemail = bugemailentry
# </snip> ...

您的缩进似乎有问题。
Enter
是否嵌套在
topLevel
中,或者它们是否在同一级别?Enter是嵌套的。但是,如果Enter是嵌套的,它能从顶级条目中获取数据吗?我修改了代码的缩进,希望能纠正它。如果我弄错了,请随意修复它。FWIW,python3.x有
非局部
关键字来指示变量来自闭包,但不是全局变量。但是,由于您实际上没有做任何事情来更改绑定到名称的值,因此您也不需要这样做。我收到一个错误:TypeError:需要一个字符缓冲区对象。在线:bugwrite.write(bugtitle)@user3167683——正如我所解释的,您需要使用
.get()
方法:
bugwrite.write(bugtitle.get())
谢谢!!它起作用了。我永远不会忘记你。非常感谢。