CTkButton鼠标悬停切换图片时出现闪烁问题求助
问题原因分析
当鼠标进入按钮触发<Enter>事件显示图标后,图标作为按钮的子元素会覆盖按钮的部分交互区域。此时鼠标悬停在图标上时,会被系统判定为离开按钮的主交互区域,进而触发<Leave>事件;<Leave>事件触发后隐藏图标,图标消失后鼠标又回到按钮的主交互区域,再次触发<Enter>事件,如此循环往复就造成了图标持续闪烁的现象。
另外你代码中调用了私有方法button._draw(),虽然这不是核心原因,但手动触发重绘可能会加重闪烁问题——configure()方法本身就会自动触发组件重绘,无需手动调用。
解决方案
可以通过判断鼠标离开的目标是否为按钮的子组件,避免图标区域触发不必要的<Leave>事件,修改后的代码如下:
import customtkinter as ctk from PIL import Image window = ctk.CTk() window.geometry("200x200") icon = ctk.CTkImage( light_image=Image.open("trash.png"), dark_image=Image.open("trash.png") ) def show_icon(event): button.configure(image=icon) def hide_icon(event): # 仅当鼠标真的离开按钮组件(而非子元素)时,才隐藏图标 if event.widget not in button.winfo_children(): button.configure(image=None) button = ctk.CTkButton( window, text="", image=None, fg_color="white", hover_color="white", width=36, ) button.pack() button.bind("<Enter>", show_icon) button.bind("<Leave>", hide_icon) window.mainloop()
内容的提问来源于stack exchange,提问作者user23253837
相关产品推荐
相关产品推荐

