杰瑞科技汇

python tkinter 登录

  1. 登录窗口:包含用户名、密码输入框和登录按钮。
  2. 基本验证:检查用户名和密码是否为空。
  3. 模拟用户数据库:使用一个 Python 字典来存储用户名和密码,以验证登录信息。
  4. 登录反馈:登录成功或失败时,弹出提示窗口。
  5. 主界面:登录成功后,打开一个新的窗口作为主应用界面。

第一步:准备工作

确保你已经安装了 Python,Tkinter 是 Python 的标准库,所以通常不需要额外安装,你只需要在代码中导入它即可。

python tkinter 登录-图1
(图片来源网络,侵删)
import tkinter as tk
from tkinter import messagebox

第二步:完整代码

下面是完整的、可以直接运行的代码,你可以将其保存为一个 .py 文件(login_app.py)并运行。

import tkinter as tk
from tkinter import messagebox
# --- 模拟用户数据库 ---
# 在实际应用中,这里应该是从安全的数据库中查询
USER_DATABASE = {
    "admin": "password123",
    "user1": "letmein",
    "test": "test"
}
# --- 登录窗口类 ---
class LoginWindow:
    def __init__(self, root):
        self.root = root
        self.root.title("用户登录")
        self.root.geometry("350x250") # 设置窗口大小
        self.root.resizable(False, False) # 禁止调整窗口大小
        # 创建主框架
        main_frame = tk.Frame(root, padx=20, pady=20)
        main_frame.pack(pady=50)
        # 用户名
        tk.Label(main_frame, text="用户名:").grid(row=0, column=0, sticky="w", pady=(0, 5))
        self.username_entry = tk.Entry(main_frame, width=25)
        self.username_entry.grid(row=0, column=1, pady=(0, 15))
        # 密码
        tk.Label(main_frame, text="密码:").grid(row=1, column=0, sticky="w, pady=(0, 5)")
        self.password_entry = tk.Entry(main_frame, width=25, show="*") # show="*" 用于隐藏密码
        self.password_entry.grid(row=1, column=1, pady=(0, 20))
        # 登录按钮
        login_button = tk.Button(main_frame, text="登录", command=self.login, width=15, height=2)
        login_button.grid(row=2, column=0, columnspan=2)
        # 绑定回车键到登录函数
        self.root.bind('<Return>', lambda event: self.login())
    def login(self):
        """处理登录逻辑"""
        username = self.username_entry.get()
        password = self.password_entry.get()
        # 1. 基本验证:检查用户名和密码是否为空
        if not username or not password:
            messagebox.showerror("错误", "用户名和密码不能为空!")
            return
        # 2. 验证用户名和密码是否在数据库中
        if username in USER_DATABASE and USER_DATABASE[username] == password:
            messagebox.showinfo("成功", f"欢迎, {username}!")
            self.root.destroy() # 关闭登录窗口
            # 打开主应用窗口
            root_app = tk.Tk()
            app = MainWindow(root_app, username) # 将用户名传递给主窗口
            root_app.mainloop()
        else:
            messagebox.showerror("错误", "用户名或密码错误!")
            self.password_entry.delete(0, tk.END) # 清空密码框
# --- 主应用窗口类 ---
class MainWindow:
    def __init__(self, root, username):
        self.root = root
        self.root.title(f"主应用 - 欢迎, {username}")
        self.root.geometry("500x400")
        # 显示欢迎信息
        welcome_label = tk.Label(root, text=f"欢迎您,{username}!", font=("Arial", 18))
        welcome_label.pack(pady=50)
        # 一些示例功能按钮
        tk.Button(root, text "查看个人信息", width=20, height=2).pack(pady=10)
        tk.Button(root, text "设置", width=20, height=2).pack(pady=10)
        # 退出按钮
        tk.Button(root, text="退出登录", command=self.logout, width=20, height=2, bg="#f44336", fg="white").pack(pady=20)
    def logout(self):
        """处理退出登录逻辑"""
        self.root.destroy()
        # 重新打开登录窗口
        root_login = tk.Tk()
        app_login = LoginWindow(root_login)
        root_login.mainloop()
# --- 程序入口 ---
if __name__ == "__main__":
    root = tk.Tk()
    app = LoginWindow(root)
    root.mainloop()

第三步:代码分步解析

模拟用户数据库

USER_DATABASE = {
    "admin": "password123",
    "user1": "letmein",
    "test": "test"
}

这是一个简单的 Python 字典,键是用户名,值是对应的密码。注意: 在真实的应用中,绝不能这样明文存储密码,密码应该经过哈希(如使用 bcryptPBKDF2)处理后再存储。

LoginWindow

这个类负责创建和管理整个登录界面。

  • __init__(self, root): 构造函数。

    python tkinter 登录-图2
    (图片来源网络,侵删)
    • self.root = root: 获取传入的根窗口。
    • self.root.title(...): 设置窗口标题。
    • main_frame = tk.Frame(...): 创建一个 Frame 作为容器,可以使布局更整洁。
    • tk.Label(...): 创建标签,用于显示“用户名”和“密码”。
    • tk.Entry(...): 创建输入框。
      • width=25: 设置输入框宽度。
      • show="*": 这是密码输入框的关键,它会将输入的字符显示为星号。
    • tk.Button(...): 创建按钮。
      • command=self.login: 当按钮被点击时,调用 self.login 方法。
    • self.root.bind('<Return>', ...): 这行代码非常有用,它允许用户在输入框中按回车键(Enter)来触发登录功能,而不必必须点击按钮。
  • login(self): 登录逻辑的核心。

    • self.username_entry.get(): 获取用户名输入框中的内容。
    • self.password_entry.get(): 获取密码输入框中的内容。
    • if not username or not password:: 检查输入是否为空。
    • messagebox.showerror(...): 如果输入为空或用户名/密码错误,弹出一个错误提示框。
    • if username in USER_DATABASE and USER_DATABASE[username] == password:: 核心验证逻辑,检查用户名是否存在,并且密码是否匹配。
    • self.root.destroy(): 如果登录成功,销毁当前的登录窗口。
    • root_app = tk.Tk() ... app = MainWindow(root_app, username): 创建一个新的 Tk 窗口,并实例化 MainWindow 类,将登录成功的用户名传递过去。
    • self.password_entry.delete(0, tk.END): 如果登录失败,清空密码输入框,方便用户重新输入。

MainWindow

这个类代表登录成功后看到的主界面。

  • __init__(self, root, username): 构造函数接收根窗口和用户名。

    • self.root.title(f"主应用 - 欢迎, {username}"): 动态设置窗口标题,显示欢迎信息。
    • tk.Button(..., command=self.logout): 创建一个“退出登录”按钮,点击时调用 self.logout 方法。
  • logout(self): 退出登录逻辑。

    python tkinter 登录-图3
    (图片来源网络,侵删)
    • self.root.destroy(): 销毁主窗口。
    • root_login = tk.Tk() ... app_login = LoginWindow(root_login): 重新创建并显示登录窗口,实现“登出后返回登录页”的效果。

程序入口

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

这是所有 Python GUI 应用的标准启动方式,它首先创建一个主窗口 (Tk 实例),然后创建我们的 LoginWindow 应用实例,并启动事件循环 (mainloop()),使窗口能够响应用户的交互。


如何运行和测试

  1. 将上述代码复制并粘贴到一个名为 login_app.py 的文件中。
  2. 在终端或命令提示符中,导航到该文件所在的目录。
  3. 运行命令:python login_app.py
  4. 你会看到一个登录窗口,尝试用以下账号登录:
    • 用户名: admin, 密码: password123 (成功)
    • 用户名: user1, 密码: letmein (成功)
    • 用户名: wrong, 密码: anything (失败,会提示错误)
    • 留空用户名或密码 (失败,会提示错误)

登录成功后,会弹出欢迎界面,点击“退出登录”可以返回到登录界面。

分享:
扫描分享到社交APP
上一篇
下一篇