You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python数独生成器代码添加难度选择系统

解决Tkinter数独生成器按钮难度识别问题

方案1:通过Lambda传递难度参数(改动最小)

这种方式仅需修改按钮的command绑定逻辑,几乎不改动现有代码结构:

按钮创建代码修改

将原来的按钮绑定:

btn_easy = Button(root, text="Easy", command=generate_board)
btn_medium = Button(root, text="Medium", command=generate_board)
btn_hard = Button(root, text="Hard", command=generate_board)

修改为通过lambda传递难度标识:

btn_easy = Button(root, text="Easy", command=lambda: generate_board("easy"))
btn_medium = Button(root, text="Medium", command=lambda: generate_board("medium"))
btn_hard = Button(root, text="Hard", command=lambda: generate_board("hard"))

修改generate_board方法

给方法添加难度参数,根据参数调用对应移除函数:

def generate_board(difficulty="easy"):
    # 保留原有生成完整数独的逻辑
    full_board = generate_full_sudoku()  # 假设你已实现此函数
    
    # 根据难度调用对应数字移除函数
    if difficulty == "easy":
        puzzle_board = remove_numbers_easy(full_board)
    elif difficulty == "medium":
        puzzle_board = remove_numbers_medium(full_board)
    elif difficulty == "hard":
        puzzle_board = remove_numbers_hard(full_board)
    else:
        # 默认 fallback 到 easy 难度
        puzzle_board = remove_numbers_easy(full_board)
    
    # 保留原有界面渲染逻辑
    render_board(puzzle_board)

方案2:通过按钮控件属性识别(无需修改command参数)

如果不想改动按钮的command写法,可以通过绑定事件并获取按钮控件属性来判断难度:

按钮绑定修改

改用bind方法绑定点击事件:

btn_easy = Button(root, text="Easy")
btn_easy.bind("<Button-1>", generate_board)
btn_medium = Button(root, text="Medium")
btn_medium.bind("<Button-1>", generate_board)
btn_hard = Button(root, text="Hard")
btn_hard.bind("<Button-1>", generate_board)

修改generate_board方法

通过event.widget获取点击的按钮,再通过按钮的text或自定义属性判断难度:

def generate_board(event):
    clicked_btn = event.widget
    # 从按钮文本提取难度(转为小写匹配函数)
    difficulty = clicked_btn.cget("text").lower()
    
    full_board = generate_full_sudoku()
    
    # 调用对应难度函数
    match difficulty:
        case "easy":
            puzzle_board = remove_numbers_easy(full_board)
        case "medium":
            puzzle_board = remove_numbers_medium(full_board)
        case "hard":
            puzzle_board = remove_numbers_hard(full_board)
        case _:
            puzzle_board = remove_numbers_easy(full_board)
    
    render_board(puzzle_board)

如果按钮文本不是标准难度名称,还可以给按钮添加自定义属性:

btn_easy.difficulty = "easy"
btn_medium.difficulty = "medium"
btn_hard.difficulty = "hard"

然后在generate_board中直接读取:

difficulty = event.widget.difficulty

推荐选择

优先使用方案1,因为它对现有代码的改动最小,仅需调整按钮的command参数和给generate_board加一个参数,逻辑直观且易于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:47:30