19-Tkinter 组件-Listbox列表框

Listbox列表框

Listbox(列表框)组件用于显示一个选择列表。Listbox 只能包含文本项目,并且所有的项目都需要使用相同的字体和颜色。根据组件的配置,用户可以从列表中选择一个或多个选项。

通常被用于显示一组文本选项,,Listbox 组件跟 CheckbuttonRadiobutton组件类似,不过 Listbox 是以列表的形式来提供选项的。

执行自定义函数时,通常使用实例名.curselection()”或 selected”来获取选中项的位置索引。由于列表框实质上就是将Python 的列表类型数据可视化呈现,在程序实现时,也可直接对相关列表数据进行操作,然后再通过列表框展示出来,而不必拘泥于可视化控件的方法。

用法和参数

Listbox(master=None, **options)

  • master – 父组件
  • **options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:
选项含义
background/bg1. 设置背景颜色
2. 默认值由系统指定
borderwidth/bd1. 指定 Listbox 的边框宽度
2. 默认值由系统指定,通常是 2 像素
cursor1. 指定当鼠标在 Listbox 上飘过的时候的鼠标样式
2. 默认值由系统指定
exportselection1. 指定选中的项目文本是否可以被复制到剪贴板
2. 默认值是 True
3. 可以修改为 False 表示不允许复制项目文本
font1. 指定 Listbox 中文本的字体
2. 默认值由系统指定
foreground/fg1. 设置 Listbox 的文本颜色
2. 默认值由系统指定
height1. 设置 Listbox 显示的行数(不是像素)
2. 默认值是 10
highlightbackground1. 指定当 Listbox 没有获得焦点的时候高亮边框的颜色
2. 默认值由系统指定,通常是标准背景颜色
highlightcolor1. 指定当 Listbox 获得焦点的时候高亮边框的颜色
2. 默认值由系统指定
highlightthickness1. 指定高亮边框的宽度
2. 默认值是 1
listvariable1. 指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目
2. 在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set(“鸡蛋 鸭蛋 鹅蛋 李狗蛋”)
relief1. 指定边框样式
2. 默认值是 “sunken”
selectbackground1. 指定当某个项目被选中的时候背景颜色
2. 默认值由系统指定
selectborderwidth1. 指定当某个项目被选中的时候边框的宽度
2. 默认是由 selectbackground 指定的颜色填充,没有边框
3. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 “raised” 样式
selectforeground1. 指定当某个项目被选中的时候文本颜色
2. 默认值由系统指定
selectmode1. 决定选择的模式
2. 四种不同的选择模式:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现)
3. 默认是 “browse”
setgrid1. 指定一个布尔类型的值,决定是否启用网格控制
2. 默认值是 False
takefocus1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来)
2. 默认值是 True
width1. 设置 Listbox 的宽度(单位是文本单元)
2. 文本单元是英文字母的平均宽度(所以如果该选项设置为 2,那么是无法容纳"ww"这两个宽度大于平均宽度的字母的)
3. 默认值是 20
xscrollcommand1. 为 Listbox 组件添加一条水平滚动条
2. 将此选项与 Scrollbar 组件相关联即可
yscrollcommand1. 为 Listbox 组件添加一条垂直滚动条
2. 将此选项与 Scrollbar 组件相关联即可
justify文本对齐方式,可以设置"center", "left", "center", "right"
方法
方法功能描述
curselection()– 返回一个元组,包含被选中的选项的序号(从 0 开始)
– 如果没有选中任何选项,返回一个空元组
delete(first, last=None)删除参数 first 到 last 范围内(包含 first 和 last)的所有选项
如果忽略 last 参数,表示删除 first 参数指定的选项
insert(index, *elements)– 添加一个或多个项目到 Listbox 中
– 使用 lb.insert(“end”) 添加新选项到末尾
get(first, last=None)– 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本
– 如果忽略 last 参数,表示返回 first 参数指定的选项的文本
size()返回列表框行数
activate(index)将给定索引号对应的选项激活(在其文本下方画一条下划线)
bbox(index)– 返回给定索引号对应的选项的边框
– 返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height)
– xoffset 和 yoffset 表示距离左上角的偏移位置
– 返回的 width 是文本的实际宽度(像素为单位)
– 如果指向的选项是不可见的,那么返回值是 None
index(index)返回与 index 参数相应的选项的序号(例如 lb.index(“end”))
itemcget(index, option)– 获得 index 参数指定的项目对应的选项(由 option 参数指定)
itemconfig(index, **options)– 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定)
nearest(y)– 返回与给定参数 y 在垂直坐标上最接近的项目的序号
scan_mark(x, y)– 使用这种方式来实现 Listbox 内容的滚动
– 需要将鼠标按钮事件及当前鼠标位置绑定到 scan_mark(x, y) 方法,然后再将 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Listbox 在当前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之间滚动
see(index)– 调整列表框的位置,使得 index 参数指定的选项是可见的
selection_anchor(index)– 在 index 参数的位置下一个锚点,此后你就可以通过特殊索引 “anchor” 访问
selection_includes(index)– 返回 index 参数指定的选项的选中状态
– 返回 1 表示选中,返回 0 表示未选中
selection_clear(first, last=None)– 取消参数 first 到 last 范围内(包含 first 和 last)选项的选中状态
– 如果忽略 last 参数,则只取消 first 参数指定选项的选中状态
selection_set(first, last=None)– 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态
– 如果忽略 last 参数,则只设置 first 参数指定选项为选中状态
参考示例
from tkinter import *
def ini():
      Lstbox1.delete(0,END)
      list_items = ["数学","物理","化学","语文","外语"]
      for item in list_items:
           Lstbox1.insert(END,item)

def clear():
      Lstbox1.delete(0,END)

def ins():
      if entry.get() != '':
          if Lstbox1.curselection() == ():
              Lstbox1.insert(Lstbox1.size(),entry.get())
          else:
              Lstbox1.insert(Lstbox1.curselection(),entry.get())

def updt():
      if entry.get() != '' and Lstbox1.curselection() != ():
           selected=Lstbox1.curselection()[0]
           Lstbox1.delete(selected)
           Lstbox1.insert(selected,entry.get())

def delt():
      if Lstbox1.curselection() != ():
           Lstbox1.delete(Lstbox1.curselection())

root = Tk()
root.title('列表框实验')
root.geometry('320x240')

frame1 = Frame(root,relief=RAISED)
frame1.place(relx=0.0)

frame2 = Frame(root,relief=GROOVE)
frame2.place(relx=0.5)

Lstbox1 = Listbox(frame1)
Lstbox1.pack()

entry = Entry(frame2)
entry.pack()

btn1 = Button(frame2,text='初始化',command=ini)
btn1.pack(fill=X)

btn2 = Button(frame2,text='添加',command=ins)
btn2.pack(fill=X)

btn3 = Button(frame2,text='插入',command=ins) # 添加和插入功能实质上是一样的
btn3.pack(fill=X)

btn4 = Button(frame2,text='修改',command=updt)
btn4.pack(fill=X)

btn5 = Button(frame2,text='删除',command=delt)
btn5.pack(fill=X)

btn6 = Button(frame2,text='清空',command=clear)
btn6.pack(fill=X)

root.mainloop()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值