下面是一个简单的登录和注册界面,使用Python和Tkinter库来创建图形用户界面(GUI)。

1.代码展示

1.以下是完整的代码:

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

# 存储用户信息的文件路径
USER_DATA_FILE = "user_data.txt"

class LoginApp:
    def __init__(self, root):
        self.root = root
        self.root.title("登录")
        self.root.geometry("300x250")
        self.root.configure(bg="#f0f0f0")
        
        # 设置样式
        style = ttk.Style()
        style.theme_use('clam')
        style.configure('TLabel', font=('Arial', 12), background="#f0f0f0", foreground="#333333")
        style.configure('TEntry', font=('Arial', 12))
        style.configure('TButton', font=('Arial', 12), background="#4CAF50", foreground="white")

        # 创建用户名和密码标签及输入框
        ttk.Label(root, text="用户名").grid(row=0, column=0, padx=20, pady=10, sticky='e')
        self.username_entry = ttk.Entry(root)
        self.username_entry.grid(row=0, column=1, padx=20, pady=10)

        ttk.Label(root, text="密码").grid(row=1, column=0, padx=20, pady=10, sticky='e')
        self.password_entry = ttk.Entry(root, show="*")
        self.password_entry.grid(row=1, column=1, padx=20, pady=10)

        # 创建登录按钮和注册按钮
        ttk.Button(root, text="登录", command=self.login).grid(row=2, column=0, columnspan=2, pady=10)
        ttk.Button(root, text="注册", command=self.register_window).grid(row=3, column=0, columnspan=2, pady=10)

    def login(self):
        username = self.username_entry.get()
        password = self.password_entry.get()
        
        if self.validate_user(username, password):
            self.open_welcome_screen(username)
        else:
            messagebox.showerror("错误", "用户名或密码错误")

    def validate_user(self, username, password):
        try:
            with open(USER_DATA_FILE, "r") as file:
                for line in file:
                    stored_username, stored_password = line.strip().split(":")
                    if username == stored_username and password == stored_password:
                        return True
        except FileNotFoundError:
            pass
        return False

    def register_window(self):
        reg_root = tk.Toplevel(self.root)
        reg_app = RegisterApp(reg_root)

    def open_welcome_screen(self, username):
        self.root.destroy()
        welcome_root = tk.Tk()
        WelcomeScreen(welcome_root, username)
        welcome_root.mainloop()

class RegisterApp:
    def __init__(self, root):
        self.root = root
        self.root.title("注册")
        self.root.geometry("300x250")
        self.root.configure(bg="#f0f0f0")
        
        # 设置样式
        style = ttk.Style()
        style.theme_use('clam')
        style.configure('TLabel', font=('Arial', 12), background="#f0f0f0", foreground="#333333")
        style.configure('TEntry', font=('Arial', 12))
        style.configure('TButton', font=('Arial', 12), background="#4CAF50", foreground="white")

        # 创建用户名和密码标签及输入框
        ttk.Label(root, text="用户名").grid(row=0, column=0, padx=20, pady=10, sticky='e')
        self.username_entry = ttk.Entry(root)
        self.username_entry.grid(row=0, column=1, padx=20, pady=10)

        ttk.Label(root, text="密码").grid(row=1, column=0, padx=20, pady=10, sticky='e')
        self.password_entry = ttk.Entry(root, show="*")
        self.password_entry.grid(row=1, column=1, padx=20, pady=10)

        # 创建注册按钮
        ttk.Button(root, text="注册", command=self.register).grid(row=2, column=0, columnspan=2, pady=10)

    def register(self):
        username = self.username_entry.get()
        password = self.password_entry.get()
        
        if not username or not password:
            messagebox.showerror("错误", "用户名和密码不能为空")
            return
        
        if self.check_existing_user(username):
            messagebox.showerror("错误", "用户名已存在")
            return
        
        with open(USER_DATA_FILE, "a") as file:
            file.write(f"{username}:{password}\n")
        
        messagebox.showinfo("成功", "注册成功!")
        self.root.destroy()

    def check_existing_user(self, username):
        try:
            with open(USER_DATA_FILE, "r") as file:
                for line in file:
                    stored_username, _ = line.strip().split(":")
                    if username == stored_username:
                        return True
        except FileNotFoundError:
            pass
        return False

class WelcomeScreen:
    def __init__(self, root, username):
        self.root = root
        self.root.title("欢迎")
        self.root.geometry("300x200")
        self.root.configure(bg="#f0f0f0")
        
        # 设置样式
        style = ttk.Style()
        style.theme_use('clam')
        style.configure('TLabel', font=('Arial', 16), background="#f0f0f0", foreground="#333333")
        style.configure('TButton', font=('Arial', 12), background="#4CAF50", foreground="white")

        # 显示欢迎信息
        ttk.Label(root, text=f"欢迎回来, {username}!").pack(pady=20)

        # 创建退出按钮
        ttk.Button(root, text="退出", command=root.quit).pack(pady=10)

if __name__ == "__main__":
    root = tk.Tk()
    app = LoginApp(root)
    root.mainloop()




2.功能说明:

  1. 登录界面

  2. 包含用户名和密码的输入框。
  3. 登录按钮:验证用户名和密码是否正确。如果正确,则打开欢迎界面。
  4. 注册按钮:打开注册窗口。
  5. 注册界面

  6. 包含用户名和密码的输入框。
  7. 注册按钮:检查用户名是否已存在,如果不存在则将用户名和密码写入文件。
  8. 欢迎界面

  9. 显示欢迎信息,包含用户名。
  10. 提供退出按钮以关闭应用程序。
  11. 数据存储

  12. 用户信息存储在user_data.txt文件中,格式为username:password
  13. 消息提示

  14. 使用messagebox显示登录、注册和错误信息。
  15. 美化设计

  16. 使用ttk模块来设置样式。
  17. 添加背景颜色、字体和按钮样式以提高界面的美观性。

3.页面展示




作者:编织幻境的妖

物联沃分享整理
物联沃-IOTWORD物联网 » python登录界面

发表回复