Python中Entry内容用.get()方法获取失败,请问如何处理

from tkinter import*
import tkinter as tk

def printinfo():
    print("用户名是:%s\n 密码是:%s" % (accountE.get(),pwdE.get()))
    
root=tk.Tk()
root.title("获取文本框中的内容用.get()方法!")

accountL=Label(root,text="用户名:").grid(row=1)
pwdL=Label(root,text="密码:").grid(row=2)


u1=tk.StringVar()
p1=tk.StringVar()

accountE=tk.Entry(root,textvariable=u1).grid(row=1,column=1)
pwdE=tk.Entry(root,show="*",textvariable=p1).grid(row=2,column=1,pady=10)

loginBtn=Button(root,text="登录",command=lambda :printinfo()).grid(row=3,column=0)
quitBtn=Button(root,text="退出",command=root.quit).grid(row=3,column=1)


root.mainloop()
               

报错信息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\junyi\AppData\Local\Programs\Python\Python39\lib\tkinter_init_.py", line 1892, in call
return self.func(*args)
File "D:\py tkinter\获取文本框输入的内容.py", line 23, in
loginBtn=Button(root,text="登录",command=lambda :printinfo()).grid(row=3,column=0)
File "D:\py tkinter\获取文本框输入的内容.py", line 5, in printinfo
print("用户名是:%s\n 密码是:%s" % (accountE.get(),pwdE.get()))
AttributeError: 'NoneType' object has no attribute 'get'

刚学python ,在学习tkinter,请教如何修改以及为什么会出现这样的错误。

print("用户名是:%s\n 密码是:%s" % (u1.get(),p1.get()))


因为你这个的代码tk.Entry(root,textvariable=u1)创建输入框后直接调用.grid(row=1,column=1) 返回赋值给accountE 的是grid()方法的返回值,而不是tk.Entry()创建的输入框对象。 grid()方法没有返回值,会返回None赋值给accountE。 None自然不能调用.get()了
改成这样就好了
accountE=tk.Entry(root,textvariable=u1)
accountE.grid(row=1,column=1)
pwdE=tk.Entry(root,show="*",textvariable=p1)
pwdE.grid(row=2,column=1,pady=10)

from tkinter import*
import tkinter as tk
def printinfo():
    print("用户名是:%s\n 密码是:%s" % (accountE.get(),pwdE.get()))
root=tk.Tk()
root.title("获取文本框中的内容用.get()方法!")
accountL=Label(root,text="用户名:").grid(row=1)
pwdL=Label(root,text="密码:").grid(row=2)

u1=tk.StringVar()
p1=tk.StringVar()
accountE=tk.Entry(root,textvariable=u1)
accountE.grid(row=1,column=1)
pwdE=tk.Entry(root,show="*",textvariable=p1)
pwdE.grid(row=2,column=1,pady=10)
loginBtn=Button(root,text="登录",command=lambda :printinfo())
loginBtn.grid(row=3,column=0)
quitBtn=Button(root,text="退出",command=root.quit)
quitBtn.grid(row=3,column=1)

root.mainloop()

谢谢,确实解决了。但是另一个源码直接用Entry的名称entry1.get()也能获取成功,这两个代码有什么区别?谢谢:

from tkinter import *
import tkinter as tk
def get():
    print("获取到的内容是 %s,%s" % (entry1.get(),entry2.get()))
 
root=tk.Tk()
root.title('获取Entry内容')
root.geometry('200x100')
 
frame = Frame(root)
frame.pack()
u1 = tk.StringVar()
u2=tk.StringVar()

entry1 = tk.Entry(frame, width=20, textvariable=u1,  relief="sunken")
entry1.pack()
entry2 = tk.Entry(frame, width=20, textvariable=u2, show="*", relief="sunken")
entry2.pack()

frame1 = Frame(root)
frame1.pack()
btn1=Button(frame1, text="获取", width=20, height=1, relief=GROOVE, command=lambda :get())
btn1.pack(side="left")
 
root.mainloop()