0

我正在使用 Python3,当用户按下登录按钮时,我试图将用户在用户名和密码框中输入的内容传递给登录功能。登录功能应该只是将用户名标签打包到 GUI 上。

代码:

import tkinter
from tkinter import *
import sys

def login_gui():
    global login_window
    global studentid_entry_login
    usr_login = StringVar()
    pwd_login = StringVar()
    login_window=tkinter.Tk()
    login_window.title("Login")
    login_window.geometry("200x200+500+300")
    username_label_login = tkinter.Label(login_window, text="Username:").pack()
    username_entry_login = tkinter.Entry(login_window, textvariable=usr_login).pack()
    password_label_login = tkinter.Label(login_window, text="\nPassword:").pack()
    password_entry_login = tkinter.Entry(login_window, textvariable=pwd_login).pack()
    button_login = tkinter.Button(login_window, text="Login", command = login).pack()
    login_window.mainloop()

def login():
    username = usr_login.get()
    label1 = tkinter.Label(login_window, text=username).pack()
    return

login_gui()

追溯:

Traceback (most recent call last):
  File "C:/Python33/Folder/tkinter-test.py", line 25, in <module>
    login_gui()
  File "C:/Python33/Folder/tkinter-test.py", line 8, in login_gui
    usr_login = StringVar()
  File "C:\Python33\lib\tkinter\__init__.py", line 254, in __init__
    Variable.__init__(self, master, value, name)
  File "C:\Python33\lib\tkinter\__init__.py", line 182, in __init__
    self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
4

1 回答 1

5

StringVar除非Tk对象已被初始化,否则无法创建。

移动您的login_window行,使其出现在其他分配之前:

login_window=tkinter.Tk()
usr_login = StringVar()
pwd_login = StringVar()

此外,usr_login不会在 中可见login,所以你会得到一个NameError. 使其成为全局的,或者考虑将login_guilogin放在一个类中,这样他们就可以通过self.

于 2014-04-22T14:41:23.523 回答