问题描述
from tkinter import *
def login():
root = Tk()
root.resizable(False,False)
root.title("Log in")
root.geometry("300x200")
root.configure(bg='#AFFDFF')
def submit(usernameEntry):
with open("username.txt","w") as myFile:
myFile.write(usernameEntry.get())
Label(root,text="Please enter your username",bg='#AFFDFF').place(relx=0.5,rely=0.35,anchor=CENTER)
usernameEntry = Entry(root,width=25).place(relx=0.5,rely=0.5,anchor=CENTER)
submitBtn = Button(root,text="Submit",bg='#A4FFCB',command=lambda:
submit(usernameEntry)).place(relx=0.5,rely=0.65,anchor=CENTER)
root.mainloop()
我的输出是:
Traceback (most recent call last):
File "C:\Users\george\anaconda3\lib\tkinter\__init__.py",line 1705,in __call__
return self.func(*args)
File "c:\Users\george\Desktop\rock paper scissors\interface.py",line 48,in <lambda>
submitBtn = Button(root,command=lambda:
submit(usernameEntry)).place(relx=0.5,anchor=CENTER)
File "c:\Users\george\Desktop\rock paper scissors\interface.py",line 44,in submit
myFile.write(usernameEntry.get())
AttributeError: 'nonetype' object has no attribute 'get'
请帮我解决这个问题。我现在卡住了一段时间。 我也试过不引用“usernameEntry”来提交函数,但没有奏效。
解决方法
根据@acw1668 共享的链接,您代码中的 .place
返回 None
,而不是条目对象,因此您的行:
usernameEntry = Entry(root,width=25).place(relx=0.5,rely=0.5,anchor=CENTER)
表示 usernameEntry = None
因此该行需要变为:
usernameEntry = Entry(root,width=25)
usernameEntry.place(relx=0.5,anchor=CENTER)
这对于您的其他变量也是一样的,例如:
submitBtn = Button(root,text="Submit",bg='#A4FFCB',command=lambda: submit(usernameEntry)).place(relx=0.5,rely=0.65,anchor=CENTER)
应该是:
submitBtn = Button(root,command=lambda: submit(usernameEntry))
submitBtn.place(relx=0.5,anchor=CENTER)