- 登录窗口:包含用户名、密码输入框和登录按钮。
- 基本验证:检查用户名和密码是否为空。
- 模拟用户数据库:使用一个 Python 字典来存储用户名和密码,以验证登录信息。
- 登录反馈:登录成功或失败时,弹出提示窗口。
- 主界面:登录成功后,打开一个新的窗口作为主应用界面。
第一步:准备工作
确保你已经安装了 Python,Tkinter 是 Python 的标准库,所以通常不需要额外安装,你只需要在代码中导入它即可。

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 字典,键是用户名,值是对应的密码。注意: 在真实的应用中,绝不能这样明文存储密码,密码应该经过哈希(如使用 bcrypt 或 PBKDF2)处理后再存储。
LoginWindow 类
这个类负责创建和管理整个登录界面。
-
__init__(self, root): 构造函数。
(图片来源网络,侵删)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): 退出登录逻辑。
(图片来源网络,侵删)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()),使窗口能够响应用户的交互。
如何运行和测试
- 将上述代码复制并粘贴到一个名为
login_app.py的文件中。 - 在终端或命令提示符中,导航到该文件所在的目录。
- 运行命令:
python login_app.py - 你会看到一个登录窗口,尝试用以下账号登录:
- 用户名:
admin, 密码:password123(成功) - 用户名:
user1, 密码:letmein(成功) - 用户名:
wrong, 密码:anything(失败,会提示错误) - 留空用户名或密码 (失败,会提示错误)
- 用户名:
登录成功后,会弹出欢迎界面,点击“退出登录”可以返回到登录界面。
