优化这段代码import tkinter import pymysql def logincheck(root,inputuser,inputpwd): userval = inputuser.get() pwdval = inputpwd.get() db = pymysql.connect(host="127.0.0.1",port=3306,user='root',passwd='12345678',db='AICarNumber') cursor = db.cursor() sqlstr = "select * from user where username='"+userval+"'and pwd='"+pwdval+"'" cursor.execute(sqlstr) results = cursor.fetchall() if (len(results) >0): print("验证通过!") root.quit() root.destroy() else: print("验证失败!") db.close() def reset(): name = username.set('') pwd = passwd.set('') print(name,pwd) tkinter.showinfo('成功','重置成功') username = '' passwd = '' def login(): print("login...") root = tkinter.Tk() root.title("登录界面") root.geometry("250x70") username = tkinter.StringVar() passwd = tkinter.StringVar() tkinter.Label(root,text="用户名:").grid(row=0) tkinter.Label(root,text="密码").grid(row=1) tkinter.Entry(root,textvariable=username).grid(row=0,column=1) tkinter.Entry(root,textvariable=passwd,show='$').grid(row=1,column=1) tkinter.Button(root,text="登录",command=(lambda tk=root,x=username,y=passwd:logincheck(tk,x,y)))\ .grid(row=0,column=2,rowspan=2) resetNome_login = tkinter.Button(root, text='退出', command=reset) resetNome_login.grid(row=2,column=2) root.mainloop() if __name__ =='__main__': login()
时间: 2024-04-26 22:20:27 浏览: 200
这段代码可以进行如下优化:
1. 使用with语句来自动关闭数据库连接,避免忘记关闭而导致的资源泄露。
2. 使用参数化查询来避免SQL注入攻击,将用户输入的值作为参数传递给查询语句。
3. 将重置函数reset()中的全局变量username和passwd改为局部变量,避免与输入框的变量名重复。
4. 将重置函数reset()重命名为clear(),更符合其实际功能。
5. 优化代码结构,将登录窗口的创建和显示分离成两个函数,使代码更加清晰易懂。
下面是优化后的代码:
```
import tkinter
import pymysql
def clear(username_entry, passwd_entry):
username_entry.delete(0, tkinter.END)
passwd_entry.delete(0, tkinter.END)
tkinter.messagebox.showinfo('成功','重置成功')
def logincheck(root, username_entry, passwd_entry):
userval = username_entry.get()
pwdval = passwd_entry.get()
with pymysql.connect(host="127.0.0.1", port=3306, user='root', passwd='12345678', db='AICarNumber') as cursor:
sqlstr = "select * from user where username=%s and pwd=%s"
cursor.execute(sqlstr, (userval, pwdval))
results = cursor.fetchall()
if len(results) > 0:
print("验证通过!")
root.quit()
root.destroy()
else:
print("验证失败!")
def create_login_window():
root = tkinter.Tk()
root.title("登录界面")
root.geometry("250x70")
username_entry = tkinter.Entry(root)
passwd_entry = tkinter.Entry(root, show='$')
username_entry.grid(row=0,column=1)
passwd_entry.grid(row=1,column=1)
tkinter.Label(root,text="用户名:").grid(row=0)
tkinter.Label(root,text="密码").grid(row=1)
tkinter.Button(root,text="登录",command=(lambda tk=root,x=username_entry,y=passwd_entry:logincheck(tk,x,y))).grid(row=0,column=2,rowspan=2)
tkinter.Button(root, text='重置', command=(lambda x=username_entry, y=passwd_entry: clear(x,y))).grid(row=2,column=1)
tkinter.Button(root, text='退出', command=root.quit).grid(row=2,column=2)
return root
def show_login_window():
login_window = create_login_window()
login_window.mainloop()
if __name__ =='__main__':
show_login_window()
```
阅读全文
相关推荐













