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()
欢迎一起探讨学习!