tkinter Listbox 设置鼠标经过颜色

该文章介绍了如何利用Tkinter库中的Listbox组件,结合<Motion>和<Leave>鼠标事件,实现鼠标移动到Listbox项上时变色,离开时恢复原色的效果。主要涉及的方法包括nearest()来获取最近的索引,itemconfig()来改变列表项的背景色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tkinter Listbox 经过颜色的

Tkinter 自身带的Listbox本身没有这方面的设置,通过添加鼠标移动和离开两个事件,可以完后才能这一效果

主要内容:

  • '<Motion>'  鼠标移动事件
  • '<Leave>' 鼠标离开事件(用于离开时恢复颜色)
  • listbox.nearest  用于获取鼠标最近的Listbox 的索引
鼠标移动的函数:
def on_motion(event):
    index = event.widget.nearest(event.y)  # 获取离鼠标最近的一个列表索引
    indexes = range(event.widget.size())   # 获取Listbox所有的索引号
    #遍历所有的索引,如果等于离鼠标最近的索引就变色,其他的保持原本的颜色
    for ii in indexes:                     
        if ii == index:
            event.widget.itemconfig(index, bg='light blue')
        else:
            event.widget.itemconfig(ii, bg='white')

鼠标离开函数,如果没有这个函数,当你鼠标离开时,最后一个变色的列表颜色会保持不变,可以根据自己的需要看看要不要添加

def on_leave(event):
    # 鼠标离开时取消背景色
    indexes = range(event.widget.size())
    for ii in indexes:
        event.widget.itemconfig(ii, bg='white')

这样就完成了,  全部的示例代码如下:

# -*- coding: utf-8 -*-

import tkinter as tk


def on_motion(event):
    index = event.widget.nearest(event.y)
    indexes = range(event.widget.size())
    for ii in indexes:
        if ii == index:
            event.widget.itemconfig(index, bg='light blue')
        else:
            event.widget.itemconfig(ii, bg='white')


def on_leave(event):
    # 鼠标离开时取消背景色
    indexes = range(event.widget.size())
    for ii in indexes:
        event.widget.itemconfig(ii, bg='white')


root = tk.Tk()

listbox = tk.Listbox(root)
for i in range(20):
    listbox.insert('end', f'Item {i+1}')
listbox.pack()

listbox.bind('<Motion>', on_motion)
listbox.bind('<Leave>', on_leave)

root.mainloop()

欢迎一起探讨学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值