You need to enable JavaScript to run this app. Python tkinter防御游戏注册校验ID重复存db.txt报错咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python tkinter防御游戏注册校验ID重复存db.txt报错咨询

tkinter游戏注册功能修复实现

核心修复逻辑

按照需求调整校验流程,覆盖所有异常场景:

  • 点击按钮后先获取输入内容,做空值、长度规则校验,不通过直接终止注册
  • 读取db.txt时兼容文件不存在的首次运行场景,避免文件不存在报错
  • 拆分每行存储内容提取已注册ID列表,精确匹配ID重复状态
  • 写入文件时统一指定编码,避免跨平台乱码、读取异常

完整可运行代码

import tkinter as tk
from tkinter import messagebox
import os

# 注册规则配置
DB_PATH = "db.txt"
ID_MIN_LENGTH = 3
ID_MAX_LENGTH = 16
PWD_MIN_LENGTH = 6

def handle_register():
    # 获取输入框内容,自动去除前后空格
    input_id = id_entry.get().strip()
    input_pwd = pwd_entry.get().strip()

    # 空值校验
    if not input_id or not input_pwd:
        messagebox.showerror("注册失败", "ID和密码不能为空")
        return

    # 长度规则校验
    if not (ID_MIN_LENGTH <= len(input_id) <= ID_MAX_LENGTH):
        messagebox.showerror("注册失败", f"ID长度需为{ID_MIN_LENGTH}-{ID_MAX_LENGTH}位")
        return
    if len(input_pwd) < PWD_MIN_LENGTH:
        messagebox.showerror("注册失败", f"密码长度不能少于{PWD_MIN_LENGTH}位")
        return

    # 已注册ID校验
    registered_ids = set()
    # 兼容db.txt不存在的首次运行场景
    if os.path.exists(DB_PATH):
        with open(DB_PATH, "r", encoding="utf-8") as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                # 存储格式为 用户名,密码,拆分提取用户名
                user_info = line.split(",")
                if user_info:
                    registered_ids.add(user_info[0])

    if input_id in registered_ids:
        messagebox.showerror("注册失败", "该ID已被注册")
        return

    # 校验通过,追加写入db.txt
    with open(DB_PATH, "a", encoding="utf-8") as f:
        f.write(f"{input_id},{input_pwd}\n")

    # 注册成功处理
    messagebox.showinfo("注册成功", "账号创建完成")
    # 清空输入框
    id_entry.delete(0, tk.END)
    pwd_entry.delete(0, tk.END)

# 初始化主窗口
root = tk.Tk()
root.title("防御类游戏账号注册")
root.geometry("320x220")

# 表单组件
tk.Label(root, text="账号ID:").pack(pady=10)
id_entry = tk.Entry(root)
id_entry.pack()

tk.Label(root, text="登录密码:").pack(pady=10)
pwd_entry = tk.Entry(root, show="*")
pwd_entry.pack()

# 注册按钮
tk.Button(root, text="join membership", command=handle_register).pack(pady=25)

root.mainloop()

常见报错对应修复说明

  • 若出现FileNotFoundError:原代码未处理首次运行时db.txt不存在的场景,新增os.path.exists判断后,文件不存在时直接跳过读取流程,写入时会自动创建文件
  • 若ID重复判断失效:原代码大概率直接将整行存储内容与输入ID匹配,未做分隔拆分,现通过逗号拆分每行内容精确提取已注册ID,匹配逻辑正确
  • 若读写文件出现乱码:原代码未指定文件编码,统一指定encoding="utf-8"后兼容所有平台
  • 若点击按钮无反应:原代码可能未调用Entry组件的get()方法,直接获取了组件对象而非输入的字符串内容,现通过get()方法正确取值

内容的提问来源于stack exchange,提问作者PYTHON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 02:15:01