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

如何将触发绑定事件的Tkinter按钮/标签传递给绑定调用的函数?

Tkinter 按钮全局悬停变色解决方案

核心逻辑:Tkinter 事件回调传入的事件对象自带widget属性,该属性直接指向触发当前事件的控件,无需额外传递按钮参数。结合bind_class方法可对所有Button类实例统一绑定事件,无需逐个处理。

完整可运行代码

from tkinter import *

root = Tk()
root.title("Example")
root.configure(bg="black")

def on_enter(e):
    # 直接通过事件对象获取触发悬停的按钮
    e.widget.configure(bg="red")

def on_leave(e):
    e.widget.configure(bg="black")

button1 = Button(root, text="Button1", width=10, height=10, bg="black", fg="white")
button2 = Button(root, text="Button2", width=10, height=10, bg="black", fg="white")
button3 = Button(root, text="Button3", width=10, height=10, bg="black", fg="white")
button4 = Button(root, text="Button4", width=10, height=10, bg="black", fg="white")

button1.grid(column=0, row=0)
button2.grid(column=0, row=1)
button3.grid(column=1, row=0)
button4.grid(column=1, row=1)

# 全局绑定所有Button类控件的悬停事件,新增按钮无需额外绑定
root.bind_class("Button", "<Enter>", on_enter)
root.bind_class("Button", "<Leave>", on_leave)

root.mainloop()

方案优势

  • 无需为每个按钮单独编写绑定逻辑,代码简洁易维护
  • 后续新增按钮自动适配悬停效果,无需额外修改代码
  • 可扩展性强:如果需要过滤部分不适用悬停效果的按钮,只需给对应按钮添加自定义属性,在回调中判断过滤即可,示例如下:
    # 给不需要悬停效果的按钮添加自定义属性
    special_btn = Button(root, text="特殊按钮", bg="black", fg="white")
    special_btn.no_hover = True
    
    # 回调函数增加判断
    def on_enter(e):
        if hasattr(e.widget, 'no_hover') and e.widget.no_hover:
            return
        e.widget.configure(bg="red")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:03