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

Tkinter按钮背景色无法修改求助,求Bootstrap样式及代码美化

解决Tkinter按钮Bootstrap成功样式问题及代码美化

问题分析

按钮背景色不生效的核心原因是代码中存在重复配置语句:后面的check_button.config(bg='#4CAF50', fg='black')直接覆盖了之前设置的绿色背景与白色文字。此外,通过统一配置属性即可实现类似Bootstrap成功按钮的视觉效果,无需复杂的Style类操作。

解决方案

1. 修复按钮样式冲突

移除重复的配置代码,使用Bootstrap成功按钮的标准配色体系:

  • 主背景色:#198754(标准成功绿)
  • 文字颜色:#ffffff(纯白)
  • 激活/点击状态背景色:#157347(深一级绿色)
  • 添加圆角边框增强现代感(需Tk 8.6及以上版本支持)

2. 代码优化要点

  • 提前读取密码文件,避免每次点击重复IO操作
  • 使用with语句安全处理文件读取,防止资源泄漏
  • 优化界面布局,增强视觉层次感
  • 添加空输入提示、文件不存在异常处理等用户友好逻辑

修正后的完整代码

import hashlib
import tkinter as tk

# 密码文件名
PASSWORD_FILE = "rockyou.txt"

def md5_hash(password: str) -> str:
    """生成密码的MD5哈希值"""
    return hashlib.md5(password.encode()).hexdigest()

def crack_password(hash_value: str, password_list: list[str]) -> str | None:
    """在密码列表中匹配哈希值"""
    for password in password_list:
        if md5_hash(password) == hash_value:
            return password
    return None

def check_password():
    """处理密码检查逻辑"""
    password = password_entry.get().strip()
    if not password:
        result_label.config(text="请输入密码")
        return
    
    hash_value = md5_hash(password)
    cracked_password = crack_password(hash_value, password_list)
    
    # 更新结果显示
    if cracked_password:
        result_label.config(text=f"匹配到密码: {cracked_password}", fg="#198754")
    else:
        result_label.config(text=f"未找到匹配密码,输入的密码是: {password}", fg="#dc3545")
    
    hashed_password_label.config(text=f"MD5哈希值: {hash_value}")

# 初始化主窗口
root = tk.Tk()
root.title("密码检查工具")
root.geometry("800x400")
root.configure(bg="#f8f9fa")  # Bootstrap浅色背景

# 提前读取密码列表(仅读取一次)
password_list = []
try:
    with open(PASSWORD_FILE, "r", encoding="utf-8", errors="ignore") as f:
        password_list = [line.strip() for line in f if line.strip()]
except FileNotFoundError:
    result_label = tk.Label(root, text=f"错误:未找到文件 {PASSWORD_FILE}", font=("Segoe UI", 14), bg="#f8f9fa", fg="#dc3545")
    result_label.pack(pady=20)
    root.mainloop()
    exit()

# 创建输入区域框架
input_frame = tk.Frame(root, bg="#f8f9fa")
input_frame.pack(pady=30)

# 密码输入标签
password_label = tk.Label(input_frame, text="输入密码:", font=("Segoe UI", 14), bg="#f8f9fa")
password_label.grid(row=0, column=0, padx=10)

# 密码输入框
password_entry = tk.Entry(input_frame, show="*", font=("Segoe UI", 14), width=25, bd=1, relief="solid", borderwidth=1, highlightthickness=0)
password_entry.grid(row=0, column=1, padx=10)

# Bootstrap风格成功按钮
check_button = tk.Button(
    root,
    text="检查密码",
    font=("Segoe UI", 14, "bold"),
    command=check_password,
    bg="#198754",
    fg="#ffffff",
    activebackground="#157347",
    activeforeground="#ffffff",
    bd=0,
    padx=25,
    pady=10,
    highlightthickness=0,
    borderradius=4,  # 圆角边框(Tk 8.6+支持)
    cursor="hand2"
)
check_button.pack(pady=15)

# 结果显示区域
result_label = tk.Label(root, text="", font=("Segoe UI", 14), bg="#f8f9fa")
result_label.pack(pady=10)

hashed_password_label = tk.Label(root, text="", font=("Segoe UI", 12), bg="#f8f9fa", fg="#6c757d")
hashed_password_label.pack(pady=5)

# 启动主循环
root.mainloop()

关键改进说明

  • 按钮样式:完全匹配Bootstrap成功按钮的配色与圆角效果,鼠标悬停/点击时自动切换深色背景
  • 性能优化:密码文件仅在程序启动时读取一次,大幅降低重复操作的IO开销
  • 用户体验:添加空输入提示、文件异常处理,用不同颜色区分成功/失败结果
  • 界面美化:使用Segoe UI字体贴近现代UI风格,通过框架和间距优化布局层次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:00:05