Python-Tkinter 窗口组件之Listbox

Listbox

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

参数

background / bg

1. 设置背景颜色
2. 默认值由系统指定

borderwidth / bd

1. 指定 Listbox 的边框宽度
2. 默认值由系统指定,通常是 2 像素

cursor

1. 指定当鼠标在 Listbox 上飘过的时候的鼠标样式
2. 默认值由系统指定

exportselection

1. 指定选中的项目文本是否可以被复制到剪贴板
2. 默认值是 True
3. 可以修改为 False 表示不允许复制项目文本

font

1. 指定 Listbox 中文本的字体
2. 默认值由系统指定

foreground / fg

1. 设置 Listbox 的文本颜色
2. 默认值由系统指定

height

1. 设置 Listbox 显示的行数(不是像素)
2. 默认值是 10

highlightbackground

1. 指定当 Listbox 没有获得焦点的时候高亮边框的颜色
2. 默认值由系统指定,通常是标准背景颜色

highlightcolor

1. 指定当 Listbox 获得焦点的时候高亮边框的颜色
2. 默认值由系统指定

highlightthickness

1. 指定高亮边框的宽度
2. 默认值是 1

listvariable

1. 指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目
2. 在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set("鸡蛋 鸭蛋 鹅蛋 李狗蛋")

relief

1. 指定边框样式
2. 默认值是 "sunken"

selectbackground

1. 指定当某个项目被选中的时候背景颜色
2. 默认值由系统指定

selectborderwidth

1. 指定当某个项目被选中的时候边框的宽度
2. 默认是由 selectbackground 指定的颜色填充,没有边框
3. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 "raised" 样式

selectforeground

1. 指定当某个项目被选中的时候文本颜色
2. 默认值由系统指定

selectmode

1. 决定选择的模式
2. 四种不同的选择模式:
    "single"(单选)
    "browse"(也是单选,但拖动鼠标或通过方向键可以直接改变选项)
    "multiple"(多选)
    "extended"(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现)
3. 默认是 "browse"

setgrid

1. 指定一个布尔类型的值,决定是否启用网格控制
2. 默认值是 False

takefocus

1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来)
2. 默认值是 True

width

1. 设置 Listbox 的宽度(单位是文本单元)
2. 文本单元是英文字母的平均宽度(所以如果该选项设置为 2,那么是无法容纳"ww"这两个宽度大于平均宽度的字母的)
3. 默认值是 20

xscrollcommand

1. 为 Listbox 组件添加一条水平滚动条
2. 将此选项与 Scrollbar 组件相关联即可

yscrollcommand

1. 为 Listbox 组件添加一条垂直滚动条
2. 将此选项与 Scrollbar 组件相关联即可

方法

activate(index)

-- 将给定索引号对应的选项激活(在其文本下方画一条下划线)

bbox(index)

-- 返回给定索引号对应的选项的边框
-- 返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height)
-- xoffset 和 yoffset 表示距离左上角的偏移位置
-- 返回的 width 是文本的实际宽度(像素为单位)
-- 如果指向的选项是不可见的,那么返回值是 None

curselection()

-- 返回一个元组,包含被选中的选项的序号(从 0 开始)
-- 如果没有选中任何选项,返回一个空元组

delete(first, last=None)

-- 删除参数 first 到 last 范围内(包含 first 和 last)的所有选项
-- 如果忽略 last 参数,表示删除 first 参数指定的选项

get(first, last=None)

-- 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本
-- 如果忽略 last 参数,表示返回 first 参数指定的选项的文本

index(index)

-- 返回与 index 参数相应的选项的序号(例如 lb.index("end"))

insert(index, *elements)

-- 添加一个或多个项目到 Listbox 中
-- 使用 lb.insert("end") 添加新选项到末尾

itemcget(index, option)

-- 获得 index 参数指定的项目对应的选项(由 option 参数指定)

itemconfig(index, **options)

-- 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定)

nearest(y)

-- 返回与给定参数 y 在垂直坐标上最接近的项目的序号

scan_dragto(x, y)

-- 见下方 scan_mark(x, y)

scan_mark(x, y)

-- 使用这种方式来实现 Listbox 内容的滚动
-- 需要将鼠标按钮事件及当前鼠标位置绑定到 scan_mark(x, y) 方法,然后再将 <motion> 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Listbox 在当前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之间滚动

see(index)

-- 调整列表框的位置,使得 index 参数指定的选项是可见的

select_anchor(index)

-- 与 selection_anchor(index) 相同,见下方解释

select_clear(first, last=None)

-- 与 selection_clear(first, last=None) 相同,见下方解释

select_includes(index)

-- 与 selection_includes(index) 相同,见下方解释

select_set(first, last=None)

-- 与 selection_set(first, last=None) 相同,见下方解释

selection_anchor(index)

-- 在 index 参数的位置下一个锚点,此后你就可以通过特殊索引 "anchor" 访问

selection_clear(first, last=None)

-- 取消参数 first 到 last 范围内(包含 first 和 last)选项的选中状态
-- 如果忽略 last 参数,则只取消 first 参数指定选项的选中状态

selection_includes(index)

-- 返回 index 参数指定的选项的选中状态
-- 返回 1 表示选中,返回 0 表示未选中

selection_set(first, last=None)

-- 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态
-- 如果忽略 last 参数,则只设置 first 参数指定选项为选中状态

size()

-- 返回 Listbox 组件中选项的数量

xview(*args)

-- 该方法用于在水平方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的

command 选项来实现(具体操作参考:Scrollbar)

-- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端
--如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "pages")表示向右滚动三行

xview_moveto(fraction)

-- 跟 xview("moveto", fraction) 一样

xview_scroll(number, what)

-- 跟 xview("scroll", number, what) 一样

yview(*args)

-- 该方法用于在垂直方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
-- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
-- 如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滚动三页

yview_moveto(fraction)

-- 跟 yview("moveto", fraction) 一样

yview_scroll(number, what)

-- 跟 yview("scroll", number, what) 一样

# -*- coding:utf-8 -*-
# Author Gao

from tkinter import *

root = Tk()

# height 默认显示10条数据 listBox = Listbox(root, height=11)

# 为了在某个组件上安装垂直滚动条,需要做两件事:
# 1.设置该组件的yscrollcommand选项为Scrollbar组件的set()方法
# 2.设置Scrollbar组件的command选项为该组件的yview()方法

sb = Scrollbar(root)
sb.pack(side=RIGHT, fill=Y)

listBox = Listbox(root, yscrollcommand=sb.set)

for i in range(100):
    listBox.insert(END, i)  # ListBox添加数据

listBox.pack()
listBox.see(20)  # 调整列表框的位置,使得 index 参数指定的选项是可见的

sb.config(command=listBox.yview)


def delete():
    listBox.delete(ACTIVE)  # 删除选中的


delButton = Button(root, text="删除", command=delete)
delButton.pack(padx=10, pady=10)

root.mainloop()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,365评论 0 5
  • pyspark.sql module Module context Spark SQL和DataFrames中的重...
    盗梦者_56f2阅读 5,407评论 0 19
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • 1、窗体 1、常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。 ...
    Moment__格调阅读 4,499评论 0 11
  • 一:认识jquery jquery是javascript的类库,具有轻量级,完善的文档,丰富的插件支持,完善的Aj...
    xuguibin阅读 1,703评论 1 7