如何为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()
关键说明
- 图标处理:用
CTkImage转换PIL图片,若需要适配暗模式,可给CTkImage传入dark_image参数指定对应暗态图标 - 布局调整:通过计算输入框位置,将按钮放在输入框右侧,比原复选框布局更贴合用户使用习惯
- 状态切换:直接读取输入框的
show属性判断当前状态,无需额外变量(也可保留原变量逻辑,按需选择)
内容的提问来源于stack exchange,提问作者Rohan Menon
相关产品推荐
相关产品推荐

