python GUI 注册和登录实现
时间: 2023-08-17 15:06:07 浏览: 35
要实现 Python GUI 注册和登录功能,可以使用 Tkinter 模块创建用户界面,使用 SQLite 数据库存储用户信息。下面是一个简单的示例,可以帮助你快速入门。
首先,需要导入所需的模块:
```python
import tkinter as tk
import sqlite3
```
然后创建一个 `Tk` 对象,设置窗口标题和大小:
```python
root = tk.Tk()
root.title("Register/Login")
root.geometry("400x300")
```
接着,创建一个 `Notebook` 对象,用于切换注册和登录页面:
```python
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)
register_frame = tk.Frame(notebook)
login_frame = tk.Frame(notebook)
notebook.add(register_frame, text="Register")
notebook.add(login_frame, text="Login")
```
在注册页面中,我们需要创建一些 `Label` 和 `Entry` 控件,用于输入用户名和密码。还需要创建一个 `Button` 控件,用于提交注册信息:
```python
# 注册页面
register_label = tk.Label(register_frame, text="Register")
register_label.pack()
username_label = tk.Label(register_frame, text="Username:")
username_label.pack()
username_entry = tk.Entry(register_frame)
username_entry.pack()
password_label = tk.Label(register_frame, text="Password:")
password_label.pack()
password_entry = tk.Entry(register_frame, show="*")
password_entry.pack()
confirm_password_label = tk.Label(register_frame, text="Confirm Password:")
confirm_password_label.pack()
confirm_password_entry = tk.Entry(register_frame, show="*")
confirm_password_entry.pack()
def register():
username = username_entry.get()
password = password_entry.get()
confirm_password = confirm_password_entry.get()
if password != confirm_password:
tk.messagebox.showerror("Error", "Passwords do not match")
return
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=?", (username,))
result = c.fetchone()
if result:
tk.messagebox.showerror("Error", "Username already exists")
else:
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
tk.messagebox.showinfo("Success", "Registered successfully")
conn.close()
register_button = tk.Button(register_frame, text="Register", command=register)
register_button.pack()
```
在登录页面中,我们也需要创建一些 `Label` 和 `Entry` 控件,用于输入用户名和密码。还需要创建一个 `Button` 控件,用于提交登录信息:
```python
# 登录页面
login_label = tk.Label(login_frame, text="Login")
login_label.pack()
username_label = tk.Label(login_frame, text="Username:")
username_label.pack()
username_entry = tk.Entry(login_frame)
username_entry.pack()
password_label = tk.Label(login_frame, text="Password:")
password_label.pack()
password_entry = tk.Entry(login_frame, show="*")
password_entry.pack()
def login():
username = username_entry.get()
password = password_entry.get()
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
result = c.fetchone()
if result:
tk.messagebox.showinfo("Success", "Logged in successfully")
else:
tk.messagebox.showerror("Error", "Invalid username or password")
conn.close()
login_button = tk.Button(login_frame, text="Login", command=login)
login_button.pack()
```
最后,需要创建一个 SQLite 数据库,用于存储用户信息:
```python
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT)")
conn.commit()
conn.close()
```
完整代码如下:
```python
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.messagebox
import sqlite3
root = tk.Tk()
root.title("Register/Login")
root.geometry("400x300")
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)
register_frame = tk.Frame(notebook)
login_frame = tk.Frame(notebook)
notebook.add(register_frame, text="Register")
notebook.add(login_frame, text="Login")
# 注册页面
register_label = tk.Label(register_frame, text="Register")
register_label.pack()
username_label = tk.Label(register_frame, text="Username:")
username_label.pack()
username_entry = tk.Entry(register_frame)
username_entry.pack()
password_label = tk.Label(register_frame, text="Password:")
password_label.pack()
password_entry = tk.Entry(register_frame, show="*")
password_entry.pack()
confirm_password_label = tk.Label(register_frame, text="Confirm Password:")
confirm_password_label.pack()
confirm_password_entry = tk.Entry(register_frame, show="*")
confirm_password_entry.pack()
def register():
username = username_entry.get()
password = password_entry.get()
confirm_password = confirm_password_entry.get()
if password != confirm_password:
tk.messagebox.showerror("Error", "Passwords do not match")
return
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=?", (username,))
result = c.fetchone()
if result:
tk.messagebox.showerror("Error", "Username already exists")
else:
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
tk.messagebox.showinfo("Success", "Registered successfully")
conn.close()
register_button = tk.Button(register_frame, text="Register", command=register)
register_button.pack()
# 登录页面
login_label = tk.Label(login_frame, text="Login")
login_label.pack()
username_label = tk.Label(login_frame, text="Username:")
username_label.pack()
username_entry = tk.Entry(login_frame)
username_entry.pack()
password_label = tk.Label(login_frame, text="Password:")
password_label.pack()
password_entry = tk.Entry(login_frame, show="*")
password_entry.pack()
def login():
username = username_entry.get()
password = password_entry.get()
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
result = c.fetchone()
if result:
tk.messagebox.showinfo("Success", "Logged in successfully")
else:
tk.messagebox.showerror("Error", "Invalid username or password")
conn.close()
login_button = tk.Button(login_frame, text="Login", command=login)
login_button.pack()
# 创建 SQLite 数据库
conn = sqlite3.connect("users.db")
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS users (username TEXT, password TEXT)")
conn.commit()
conn.close()
root.mainloop()
```