所以我希望我的程序能够重置密码。问题是一切正常,第一次重置过程,但如果你想再次重置密码,它会变得邪恶,我找不到错误或解决方案。该计划第一次做什么以及应该做什么:
按下button3时,显示您必须输入当前pw的第一帧。如果按下键盘上的回车键,则右侧显示第二帧。在那里,设置一个新的pw并通过按Enter键显示第三帧。键入您在第二帧中使用的相同pw,即pw设置帧。如果两个pw相同则返回标题屏幕。
第二个+时间,按下PROBLEM:按钮3,它显示第一帧,但光标不在第一次的条目字段中(entry.focus_set()在代码中),但是光标是在第三个输入字段(最后一个,pw确认,帧),甚至没有.pack()ed或.raised或其他任何东西。如果我单击第一帧的条目(我实际上将在此处),并确认它显示第二帧,就像它应该是,但光标现在位于第一帧的条目,甚至没有活动因为它只是.pack_forget()。如果我进入第三帧,则光标位于第二帧的条目中。
from tkinter import *
root = Tk()
pw_actual = ""
pw_first = ""
def ssc_title():
sc_pw.pack_forget()
sc_pw_second.pack_forget()
sc_title.pack()
def ssc_pw_change():
sc_title.pack_forget()
sc_pw_testing.pack()
def ssc_pw_first():
sc_pw_testing.pack_forget()
sc_pw_first.pack()
def ssc_pw_second():
sc_pw_first.pack_forget()
sc_pw_second.pack()
#-----------------------------------
def ev_pw_testing(event):
pw_proof = en_pw_testing.get()
if pw_proof == pw_actual:
en_pw_testing.delete(0, END)
ssc_pw_first()
else:
en_pw_testing.delete(0, END)
def ev_pw_first(event):
global pw_first
pw_first = en_pw_first.get()
if pw_first == "":
errormessage("Please enter a password")
else:
en_pw_first.delete(0, END)
ssc_pw_second()
def ev_pw_second(event):
global pw_first
pw_second = en_pw_second.get()
if pw_first == pw_second:
write(pw_second)
en_pw_second.delete(0, END)
ssc_title()
else:
errormessage("Passwords don't match")
en_pw_second.delete(0, END)
#------------------
sc_pw_testing = Frame(root, bg=bgclr)
lab_pw_testing = Label(sc_pw_testing, text="Please enter the password", bg=bgclr, fg=fontclr, font=font_12).pack(ipady=10)
en_pw_testing = Entry(sc_pw_testing, show="X")
en_pw_testing.pack()
en_pw_testing.focus_set()
en_pw_testing.bind("<Return>", ev_pw_testing)
sc_pw_first = Frame(root, bg=bgclr)
lab_pw_first = Label(sc_pw_first, text="Set new password", bg=bgclr, fg=fontclr, font=font_12).pack(ipady=10)
en_pw_first = Entry(sc_pw_first, show="X")
en_pw_first.pack()
en_pw_first.focus_set()
en_pw_first.bind("<Return>", ev_pw_first)
sc_pw_second = Frame(root, bg=bgclr)
lab_pw_second = Label(sc_pw_second, text="Confirm password", bg=bgclr, fg=fontclr, font=font_12).pack(ipady=10)
en_pw_second = Entry(sc_pw_second, show="X")
en_pw_second.pack()
en_pw_second.focus_set()
en_pw_second.bind("<Return>", ev_pw_second)
sc_title = Frame(root, bg=bgclr)
bttn3 = Button(sc_title, text="Password reset", bg=bgclr, fg=fontclr, font=font_12, relief=FLAT, command=ssc_pw_change).pack()
#------------
root.mainloop()
(这里我没有包含不相关的函数等错误消息,只是创建一个窗口或泡菜的东西,因为那时它太长了,问题似乎不在那里。)
就像我说的那样 - 第一次更改密码效果很好。在第一次出现相同问题后每隔一段时间。让它再次工作的唯一方法是重新启动程序。我正在尝试以下解决方案:
每个解决方案就像现在的代码一样工作,根本没有变化,问题仍然存在。
我的意思是我可以解决它,比如禁用按钮,这样你只能在每个会话中重置一次pw,但没有理由为什么它应该是这样,甚至省略entry.focus_set(),所以无论如何都必须单击输入字段,并且问题永远不会发生(在每次输入字符之前单击每个输入字段非常烦人)。
我没有想法,我可以尝试做不同的事情。我觉得错过森林的树木。来吧伙计们,给我一个屁股,我在这里错过了什么!?