Tkinter (09) 列表框部件 Listbox
列表框部件的创建及其选项
import tkinter as tk
parent = tk.Tk()
w = tk.Listbox(parent, option, ...)
| 选项 | 说明 |
|---|---|
| activestyle | active 行的样式, ‘underline’ (内定, 底线), ‘dotbox’ (点线框), ‘none’ (无) |
| bg or background | 背景颜色 |
| bd or borderwidth | 外框寛度,内定为 2 |
| cursor | 在部件上方时,鼠标的图样 |
| disabledforeground | disabled 时,前景颜色 |
| exportselection | 文本可否复制到剪贴板 0/1 |
| font | 文本字体 |
| fg or foreground | 前景颜色 |
| height | 行数, 内定为 10 |
| highlightbackground | 非聚焦时的聚焦颜色 |
| highlightcolor | 聚焦时的聚焦颜色 |
| highlightthickness | 聚焦厚度,内定 1, 0 则无 |
| listvariable | StringVar 一个字符串变量, 内容为 tuple 字符串, 如 “(‘v0’, ‘v1’, …)” |
| relief | 外框花样,内定为 SUNKEN |
| selectbackground | 被选择文本的背景颜色 |
| selectborderwidth | 被选择文本的外框寛度 |
| selectforeground | 被选择文本的前景颜色 |
| selectmode | 可选择的行数及拖弋效果, BROWSE (内定, 单行可拖弋), SINGLE (单行, 拖弋无效), MULTIPLE (点击多选), EXTENDED (拖弋多选) |
| state | NORMAL, DISABLED |
| takefocus | TAB 键在部件是否会循环焦点 0/1 |
| width | 部件字寛,内定为 20 个标准字寛 |
| xscrollcommand | 水平滚动条 scrollbar.set () 方法 |
| yscrollcommand | 垂直滚动条 scrollbar.set () 方法 |
选项的索引方式
- 整数值, 从 0 开始, 为索引值
- END 指最后一项
- ACTIVE 最被选择的行
- ANCHOR 指定的定位行
- '@x, y' 参考点 (x, y) 为对应部件左上角的座标点, 指最接近该点的行.
方法及说明
| 方法 & 说明 |
|---|
| activate(index) 选择某行 |
| bbox(index) 返回某行所在的位置 (左, 上, 宽, 高), 看不见则返回 None, 部份看见会全部返回 |
| curselection() 返回目前所有的选项 tuple |
| delete(first, last=None) 删除第 first 行, 或 first 到 last (含) 行 |
| get(first, last=None) 返回最接近第 first 行的内容, 或 first 到 last (含) 行的内容 tuple |
| index(i) 可能的话, 第 i 行显示在可见的第一行 |
| insert(index, *elements) 新增多行在 index 之前 |
| itemcget(index, option) 返回第 index 行的该选项值, 无则返回 None |
| itemconfig(index, option=value, …) 设置第index 行的选项值, background(背景颜色)/foreground(前景颜色)/selectbackground(被选择文本的背景颜色)/selectforeground(被选择文本的前景颜色) |
| nearest(y) 返回最接近 y 座标, 可见行的索引值 |
| scan_dragto(x, y) 鼠标键按下事件处理程序中已标记位置时, 鼠标滚动事件处理程序拖弋卷动部件,(x, y)为位置 |
| scan_mark(x, y) 鼠标键按下事件处理程序中标记位置 (x, y) |
| see(index) 调整列表, 使第 index 可见 |
| selection_anchor(index) 设置一个行引定位在 index, 以作为未来参考使用 ANCHOR |
| selection_clear(first, last=None) 去除first(到含last)行的选择 |
| selection_includes(index) 第index行是否已选 |
| selection_set(first, last=None) 选择first(到含last)行 |
| size() 部件中行总数 |
| xview() 供水平滚动条 scrollbar 选项 command 使用 |
| xview_moveto(fraction) 移动水平滚动条, fraction 为 0 ~ 1 |
| xview_scroll(number, what) 水平滚动画布 number 个单位,单位 what 为 UNITS 或 PAGES, UNITS 为字寛,PAGES 的大小为部件寛度,正值向右,负值向左 |
| yview() 供垂直滚动条 scrollbar 选项 command 使用 |
| yview_moveto(fraction) 移动垂直滚动条, fraction 为 0 ~ 1 |
| yview_scroll(number, what) 水平滚动画布 number 个单位,单位 what 为 UNITS 或 PAGES, UNITS 为行,PAGES 的大小为部件高度,正值向下,负值向上 |
范例视窗及代码

import tkinter as tk
root = tk.Tk()
root.wm_title("Listbox Demo")
font = ('Courier New', 16, 'bold')
elements = ('List for House', 'List for Friend', 'List for Cash', 'List for Car',
'List for Motorcycle', 'List for Boat', 'List for Airplane')
x_scrollbar = tk.Scrollbar(orient=tk.HORIZONTAL)
x_scrollbar.grid(row=1, column=0, sticky=tk.E+tk.W)
y_scrollbar = tk.Scrollbar(orient=tk.VERTICAL)
y_scrollbar.grid(row=0, column=1, sticky=tk.N+tk.S)
list_box = tk.Listbox(root, font=font, selectmode=tk.MULTIPLE,
width=15, height=5, activestyle='dotbox', xscrollcommand=x_scrollbar.set,
yscrollcommand=y_scrollbar.set)
list_box.insert(tk.END, *elements)
list_box.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
x_scrollbar['command'] = list_box.xview
y_scrollbar['command'] = list_box.yview
root.mainloop()
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu