python - NameError:名称“屏幕”未定义
问题描述
我不断收到错误消息:
Traceback (most recent call last):
File "C:\Users\name\Desktop\dice\login system.py", line 64, in <module>
loginForm()
File "C:\Users\name\Desktop\dice\login system.py", line 33, in loginForm
screen1 = Toplevel(screen)
NameError: name 'screen' is not defined
这是一个学校项目,我首先必须制作一个登录系统,这可能与错误有关:
def main_screen():
global screen
global USERNAME
global PASSWORD
screen = Tk()
screen.title('Name')
screen.geometry("340x200")
USERNAME = StringVar()
PASSWORD = StringVar()
Label(text = 'Welcome to Name', bg = 'grey', width = 300, height = 2, font = ('calibri', 12, 'bold')).pack()
Label(text = '').pack()
Button(text = 'Login', height = 2, width = 30, command = loginForm).pack()
Label(text = '').pack()
Button(text = 'Register', height = 2, width = 30, command = registerForm).pack()
screen.mainloop()
def Database():
global conn, cursor
conn = sqlite.connect("db_member.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS `member` (mem_id INTEGER PRIMARY KEY AUTINCREMENT NOT NULL, username TEXT, password TEXT)")
def loginForm():
global screen1, lbl_result1
screen1 = Toplevel(screen)
screen1.title('Login')
screen1.geometry("400x400")
lbl_title = Label(screen1, text = "Login", bg = 'grey', width = 50, height = 2, font = ('calibri', 12, 'bold'))
lbl_title.pack()
lbl_username = Label(screen1, text = "Username:", font = ('calibri', 25, 'bold'), bd = 18)
lbl_username.pack()
username = Entry(screen1, font = ('calibri', 20, 'bold'), textvariable = USERNAME, width = 15)
username.pack()
lbl_password = Label(screen1, text = "Password:", font = ('calibri', 25, 'bold'), bd = 18)
lbl_password.pack()
password = Entry(screen1, font = ('calibri', 20, 'bold'), textvariable = PASSWORD, width = 15, show = "*")
password.pack()
lbl_result1 = Label(screen1, text = "", font = ('calibri', 18, 'bold'))
lbl_result1.pack()
btn_login = Button(screen1, text = 'Login', font = ('calibri', 18), width = 25, command = login)
btn_login.pack()
def login():
Databse()
if USERNAME.get() == "" or PASSWORD.get() == "":
lbl_result1.config(text = 'Please complete all the fields', fg = 'orange')
else:
cursor.execute("SELECT * FROM `member` WHERE `username` = ? and `password` = ?", (USERNAME.get(), PASSWORD.get()))
if cursor.fetchone() is not None:
lbl_result1.config(text = 'You logged in successfully', fg = 'blue')
else:
lbl_result1.config(text = 'Invalid Username or Password', fg = 'red')
loginForm()
main_screen()
因为我已经完成了 def login():
它一直说没有定义屏幕或者没有定义用户名和密码。
解决方案
global screen
没有定义变量;它只是说该名称指的是一个名为的全局变量screen
,如果它存在的话。
问题是您在调用(实际上为 name 分配一个值)之前调用loginForm
(它试图获取 的值) 。screen
main_screen
screen
但是,您不应该使用这么多全局变量。将值作为参数传递给函数,使用返回值,并考虑使用类来封装无法通过参数传递轻松共享的数据。
推荐阅读
- solr - SolrCloud 错误加载 solr.VelocityResponseWriter
- highcharts - highcharts 更改极区样条图上的平滑设置
- android - Android:键盘在片段中隐藏 EditText [材料]
- linux - ASP.NET Core IHostedService 在 linux 上托管时停止
- clion - Clion clangd,如何限制内存使用
- python - 如何将变量设置为 None 或数组并检查它是哪一个
- sql - 尝试通过 Oracle 11g 运行脚本
- java - 使用扫描仪识别整数和字符串,如果输入了某个字符串,则停止用户输入
- opengl - 如何使用 OpenGL 正确投影和扭曲 3d 点
- c# - Blazor 应用中的 Azure Speech To Text(C# SDK)