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

如何为customtkinter复选框添加自定义图片实现显示密码

用CustomTkinter实现带眼睛图标的密码显示切换

因为CTkCheckBox确实不支持自定义勾选图标,你可以用CTkButton替代复选框,通过切换按钮上的眼睛图标来实现需求,具体步骤和代码如下:

实现思路

  • 准备两张图标:闭眼图标(对应密码隐藏状态)和睁眼图标(对应密码显示状态)
  • 用CTkButton代替原复选框,点击按钮时切换图标,并同步修改输入框的show属性
  • 调整按钮布局,放在密码输入框的右侧,更符合常见UI设计

修改后的完整代码示例

import customtkinter as ctk
from PIL import Image

# 初始化CustomTkinter
ctk.set_appearance_mode("light")
ctk.set_default_color_theme("blue")

app = ctk.CTk()
app.geometry("400x500")
app.title("Login")

login_form_y = 0.2
frame1 = ctk.CTkFrame(master=app, width=350, height=300)
frame1.place(relx=0.5, rely=0.5, anchor=ctk.CENTER)

# 密码输入框
entry2 = ctk.CTkEntry(master=frame1, width=220, placeholder_text="Password", show="*", font=('Segoe Ui', 17))
entry2.place(relx=0.5, rely=login_form_y + 0.06, anchor=ctk.CENTER)

# 加载并转换眼睛图标(替换为你的图标文件路径)
def load_icon(path, size=(20,20)):
    return ctk.CTkImage(light_image=Image.open(path), size=size)

eye_closed_icon = load_icon("eye_closed.png")
eye_open_icon = load_icon("eye_open.png")

# 切换密码显示状态的函数
def toggle_password():
    if entry2.cget("show") == "*":
        entry2.configure(show="")
        toggle_btn.configure(image=eye_open_icon)
    else:
        entry2.configure(show="*")
        toggle_btn.configure(image=eye_closed_icon)

# 创建切换按钮(代替原复选框)
toggle_btn = ctk.CTkButton(
    master=frame1,
    image=eye_closed_icon,
    text="",
    width=30,
    command=toggle_password
)
# 把按钮放在密码输入框右侧
toggle_btn.place(relx=0.5 + (220/2)/frame1.winfo_width(), rely=login_form_y + 0.06, anchor=ctk.WEST)

app.mainloop()

关键说明

  1. 图标处理:用CTkImage转换PIL图片,若需要适配暗模式,可给CTkImage传入dark_image参数指定对应暗态图标
  2. 布局调整:通过计算输入框位置,将按钮放在输入框右侧,比原复选框布局更贴合用户使用习惯
  3. 状态切换:直接读取输入框的show属性判断当前状态,无需额外变量(也可保留原变量逻辑,按需选择)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:39