Tkinter 输入框值在 mongodb 中存储为 null
Tkinter entry box values stored as null in mongodb
我使用 tkinter 制作了一个简单的注册表单,mongoengine.But 由于某种原因,从 tkinter 输入框中获取的值在 mongodb.I 中存储为 null 或空,我猜问题是该变量无法获取在 tkinter 输入框中输入的值,但我无法找到解决此问题的方法,因为代码在语法上看起来是正确的。
from tkinter import *
import tkinter.messagebox
from mongoengine import *
connect('demo')
class Registration(Document):
username = StringField(required=True,unique=True)
password = StringField(required=True)
def register():
if len(Registration.objects(username=name)) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=name,
password=pwd
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")
# GUI
root = Tk()
root.title("Registration Demo")
frame = Frame(root,width=500,height=500)
frame.pack()
label1 = Label(frame,text="username")
label2 = Label(frame,text="password")
entry1 = Entry(frame)
entry2 = Entry(frame)
name = entry1.get()
pwd = entry2.get()
button = Button(frame,text="Register",command=register)
label1.grid(row=0,column=0,sticky=E)
label2.grid(row=1,column=0,sticky=E)
entry1.grid(row=0,column=1)
entry2.grid(row=1,column=1)
button.grid(columnspan=2)
root.mainloop()
这是 mongodb table 视图:
Mongodb Output
正如您在输出中看到的,虽然用户输入了一个输入,但用户名和密码字段是空白的。
这两行:
name = entry1.get()
pwd = entry2.get()
没有按照您认为的那样做,您可以删除它们,因为它们没有任何帮助。
正在发生的事情是 entry1
和 entry2
的值在程序开始时被收集,这将始终等于一个空字符串,因为它会立即被调用 1 次程序启动。这只会发生一次,并且在您引用变量 name
或 pwd
时不会更新。您需要从函数内部调用 entry1.get()
和 entry2.get()
。
改变这个:
def register():
if len(Registration.objects(username=name)) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=name,
password=pwd
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")
为此:
def register():
if len(Registration.objects(username=entry1.get())) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=entry1.get(),
password=entry2.get()
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")
我使用 tkinter 制作了一个简单的注册表单,mongoengine.But 由于某种原因,从 tkinter 输入框中获取的值在 mongodb.I 中存储为 null 或空,我猜问题是该变量无法获取在 tkinter 输入框中输入的值,但我无法找到解决此问题的方法,因为代码在语法上看起来是正确的。
from tkinter import *
import tkinter.messagebox
from mongoengine import *
connect('demo')
class Registration(Document):
username = StringField(required=True,unique=True)
password = StringField(required=True)
def register():
if len(Registration.objects(username=name)) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=name,
password=pwd
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")
# GUI
root = Tk()
root.title("Registration Demo")
frame = Frame(root,width=500,height=500)
frame.pack()
label1 = Label(frame,text="username")
label2 = Label(frame,text="password")
entry1 = Entry(frame)
entry2 = Entry(frame)
name = entry1.get()
pwd = entry2.get()
button = Button(frame,text="Register",command=register)
label1.grid(row=0,column=0,sticky=E)
label2.grid(row=1,column=0,sticky=E)
entry1.grid(row=0,column=1)
entry2.grid(row=1,column=1)
button.grid(columnspan=2)
root.mainloop()
这是 mongodb table 视图: Mongodb Output
正如您在输出中看到的,虽然用户输入了一个输入,但用户名和密码字段是空白的。
这两行:
name = entry1.get()
pwd = entry2.get()
没有按照您认为的那样做,您可以删除它们,因为它们没有任何帮助。
正在发生的事情是 entry1
和 entry2
的值在程序开始时被收集,这将始终等于一个空字符串,因为它会立即被调用 1 次程序启动。这只会发生一次,并且在您引用变量 name
或 pwd
时不会更新。您需要从函数内部调用 entry1.get()
和 entry2.get()
。
改变这个:
def register():
if len(Registration.objects(username=name)) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=name,
password=pwd
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")
为此:
def register():
if len(Registration.objects(username=entry1.get())) == 1:
tkinter.messagebox.showinfo("Oops!", "Username already taken")
else:
entry = Registration(
username=entry1.get(),
password=entry2.get()
)
entry.save()
tkinter.messagebox.showinfo("Notice", "Registered Successfully !")