You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python中PySimpleGUI的'Login'键未找到错误?

问题解决与优化建议

核心问题:找不到'Login'键的原因

你当前代码里的sg.Frame('Login', login_layout, visible=True),第一个参数'Login'只是框架的标题文本,不是控件的唯一标识(key)。PySimpleGUI通过key定位控件,必须显式给Frame设置key参数,才能用window['Login']访问它。

修改后的关键代码

把layout部分的Frame定义补充key参数:

layout = [
    [sg.Frame('Login', login_layout, visible=True, key='Login')],
    [sg.Frame('Main', main_layout, visible=False, key='Main')]
]

额外优化点(针对新手的实用改进)

  1. 给输入框加key,避免索引访问
    现在你用values[0]、values[1]访问输入值,一旦布局变动很容易出错。给输入框加key更直观:

    login_layout = [
            [sg.Text('Username'), sg.InputText(do_not_clear=False, key='-USER-')],
            [sg.Text('Password'), sg.InputText(do_not_clear=False, password_char='*', key='-PASS-')],
            [sg.Button('OK')]
        ]
    

    验证逻辑改成:

    if values['-USER-'] == us and values['-PASS-'] == pw:
    
  2. 密码输入框隐藏明文
    上面的代码已经加了password_char='*',输入密码时会显示星号,符合密码输入的常规体验。

  3. 后续功能优化方向

    • 不要硬编码账号密码:可以用JSON/INI配置文件存储,或者后续用数据库
    • 加密存储密码:用cryptography库的Fernet对称加密,避免明文泄露
    • 密码生成功能:随机生成包含大小写字母、数字、特殊字符的高强度密码,示例代码:
      def generate_password(length=12):
          chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*'
          return ''.join(random.choice(chars) for _ in range(length))
      
    • 密码存储:用SQLite数据库保存账号、对应平台、加密后的密码,实现持久化
    • 窗口逻辑简化:把循环改成更常规的写法:
      while True:
          event, values = window.read()
          if event == sg.WIN_CLOSED:
              break
          # 其他逻辑...
      

内容的提问来源于stack exchange,提问作者laff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:45:43