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()