python - PySimpleGUI - 登录验证器
问题描述
我无法让登录验证器正常工作。除了 login() 函数外,一切正常。其他两个函数 progress_bar() 和 create_account() 运行没有问题。我不断收到KeyError: '-username-'消息。我已经尝试了一切,即使不使用函数,仍然如此。我找不到问题。任何人?@MacItaly
import PySimpleGUI as sg
#PROGRESS BAR
def progress_bar():
sg.theme('LightBlue2')
layout = [[sg.Text('Creating your account...')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progbar')],
[sg.Cancel()]]
window = sg.Window('Working...', layout)
for i in range(1000):
event, values = window.read(timeout=1)
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
window['progbar'].update_bar(i + 1)
window.close()
def create_account():
sg.theme('LightBlue2')
layout = [[sg.Text("Sign Up", size =(15, 1), font=40, justification='c')],
[sg.Text("E-mail", size =(15, 1),font=16), sg.InputText(key='-email-', font=16)],
[sg.Text("Re-enter E-mail", size =(15, 1), font=16), sg.InputText(key='-remail-', font=16)],
[sg.Text("Create Username", size =(15, 1), font=16), sg.InputText(key='-username-', font=16)],
[sg.Text("Create Password", size =(15, 1), font=16), sg.InputText(key='-password-', font=16, password_char='*')],
[sg.Button("Submit"), sg.Button("Cancel")]]
window = sg.Window("Sign Up", layout)
while True:
event,values = window.read()
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
else:
if event == "Submit":
if values['-email-'] != values['-remail-']:
sg.popup_error("Error", font=16)
continue
elif values['-email-'] == values['-remail-']:
progress_bar()
break
window.close()
create_account()
def login():
sg.theme("LightBlue2")
layout = [[sg.Text("Log In", size =(15, 1), font=40)],
[sg.Text("Username", size =(15, 1), font=16),sg.InputText(key='-usrnm-', font=16)],
[sg.Text("Password", size =(15, 1), font=16),sg.InputText(key='-pwd-', password_char='*', font=16)],
[sg.Button('Ok'),sg.Button('Cancel')]]
window = sg.Window("Log In", layout)
while True:
event,values = window.read()
if event == "Cancel" or event == sg.WIN_CLOSED:
break
else:
if event == "Ok":
if values['-usrnm-'] == values['-username-'] and values['-pwd-'] == values['-password-']:
sg.popup("Welcome!")
break
elif values['-usrnm-'] != values['-username-'] and values['-pwd-'] != values['-password-']:
sg.popup("Invalid login. Try again")
window.close()
login()
解决方案
values['-password-']
关闭 windows gui 后就不能使用了。您必须将用户名和密码存储在变量中。通过使用变量,您可以在登录功能中验证用户名和密码。
试试这个 :
import PySimpleGUI as sg
username = ''
password = ''
#PROGRESS BAR
def progress_bar():
sg.theme('LightBlue2')
layout = [[sg.Text('Creating your account...')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progbar')],
[sg.Cancel()]]
window = sg.Window('Working...', layout)
for i in range(1000):
event, values = window.read(timeout=1)
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
window['progbar'].update_bar(i + 1)
window.close()
def create_account():
global username, password
sg.theme('LightBlue2')
layout = [[sg.Text("Sign Up", size =(15, 1), font=40, justification='c')],
[sg.Text("E-mail", size =(15, 1),font=16), sg.InputText(key='-email-', font=16)],
[sg.Text("Re-enter E-mail", size =(15, 1), font=16), sg.InputText(key='-remail-', font=16)],
[sg.Text("Create Username", size =(15, 1), font=16), sg.InputText(key='-username-', font=16)],
[sg.Text("Create Password", size =(15, 1), font=16), sg.InputText(key='-password-', font=16, password_char='*')],
[sg.Button("Submit"), sg.Button("Cancel")]]
window = sg.Window("Sign Up", layout)
while True:
event,values = window.read()
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
else:
if event == "Submit":
password = values['-password-']
username = values['-username-']
if values['-email-'] != values['-remail-']:
sg.popup_error("Error", font=16)
continue
elif values['-email-'] == values['-remail-']:
progress_bar()
break
window.close()
create_account()
def login():
global username,password
sg.theme("LightBlue2")
layout = [[sg.Text("Log In", size =(15, 1), font=40)],
[sg.Text("Username", size =(15, 1), font=16),sg.InputText(key='-usrnm-', font=16)],
[sg.Text("Password", size =(15, 1), font=16),sg.InputText(key='-pwd-', password_char='*', font=16)],
[sg.Button('Ok'),sg.Button('Cancel')]]
window = sg.Window("Log In", layout)
while True:
event,values = window.read()
if event == "Cancel" or event == sg.WIN_CLOSED:
break
else:
if event == "Ok":
if values['-usrnm-'] == username and values['-pwd-'] == password:
sg.popup("Welcome!")
break
elif values['-usrnm-'] != username or values['-pwd-'] != password:
sg.popup("Invalid login. Try again")
window.close()
login()
推荐阅读
- c++ - cURL setopt CONNECTTIMEOUT 与 TIMEOUT
- xamarin.forms - 如何以编程方式从 Android 设备中检索已安装的证书(Xamarin)
- android - 如何正确地将数据从 Android 发送到 Flutter?
- vue.js - 调用 Vuex 突变需要太多时间来加载内容和突变
- c++ - 逻辑运算符 || 和 && 的区别 - 我一直在犯错误
- javascript - 协助展平包含一个对象(或可能超过 1 个)的对象数组
- ffmpeg - ffmpeg - 一次执行 2 个或更多命令
- node.js - 如何捆绑环境依赖包?
- matplotlib - 记录互动情节
- regex - Atom.io 搜索字段中的正则表达式