tk.Listbox的用法

2020年7月5日 / 3,625次阅读 / Last Modified 2020年7月5日
tkinter

终于在项目中用到了tk.Listbox,需要写篇文章总结一下用法。

创建Listbox

import tkinter as tk

root = tk.Tk()
listbox = tk.Listbox(root)
listbox.pack()

for it in ('maixj.net', 'pynote.net', 'abc', '123'):
    listbox.insert(tk.END, it)

root.mainloop()

向Listbox中添加数据,用insert函数,更Text控件一样。0向起始位置插入,END向结尾位置插入,ACTIVE当前元素位置为索引。

以上代码运行效果如下:

创建Listbox
创建Listbox

Listbox的选择模式

Listbox有好几种选择模式(selectmode),默认的模式为selectmode=tk.BROWSE,鼠标移动单选。当selectmode=tk.MULTIPLE时,就可以多选:

import tkinter as tk

root = tk.Tk()
listbox = tk.Listbox(root, selectmode=tk.MULTIPLE)
listbox.pack()

for it in ('maixj.net', 'pynote.net', 'abc', '123'):
    listbox.insert(tk.END, it)

root.mainloop()

以上代码就是多选了!

当selectmode=tk.EXTENDED,也是多选,不过选择方式有点不一样,可以鼠标移动多选。还有selectmode=tk.SINGLE,单选,但不响应鼠标的移动,也是操作上的细节稍有不同,请同学自己尝试。

Listbox与Scrollbar绑定

获得Listbox中选择的内容

我可以可以用curselection()函数来获取用户在Listbox中选择的内容索引(index):

import tkinter as tk


def _ps():
    print(listbox.curselection())


root = tk.Tk()
listbox = tk.Listbox(root, selectmode=tk.SINGLE)
listbox.pack()

for it in ('maixj.net', 'pynote.net', 'abc', '123'):
    listbox.insert(tk.END, it)

tk.Button(root, text='print selection', command=_ps).pack()

root.mainloop()

运行效果:

获得Listbox中选择内容的index
获得Listbox中选择内容的index

如果是在可多选的情况下,curselection()的返回就是一个含有多个index的tuple。

有了index,我们还要提取出index对应的内容,这时需要给Listbox绑定一个tk变量,然后通过get函数来获取内容:

import tkinter as tk


def _ps():
    print(list_str.get())
    print(listbox.curselection())


root = tk.Tk()
list_str = tk.StringVar()
listbox = tk.Listbox(root,
                     listvariable=list_str,
                     selectmode=tk.EXTENDED)
listbox.pack()

for it in ('maixj.net', 'pynote.net', 'abc', '123'):
    listbox.insert(tk.END, it)

tk.Button(root, text='print selection', command=_ps).pack()

root.mainloop()
获得Listbox中选择的内容
获得Listbox中选择的内容

在selectmode=tk.EXTENDED时,选中了后面三项,通过绑定Listbox的变量list_str.get()函数,直接得到了整个内容tuple,然后我们还有index tuple,有这两样,就可以直接提取具体的内容了。

再说一下Listbox绑定变量的set函数,跟其它tk控件绑定变量的set函数一样,直接修改Listbox中的内容,相当于把Listbox里所有项目更新一遍。

Listbox其它函数

Listbox.size(),返回一共有多少个数据项;

Listbox.selection_includes(),判断某个项是否被选中,参数为一个index;

Listbox.delete(pos, length),从pos开始删除多少个项目,(0, tk.END)就是全部删除;

lb.selection_set(0,10)
lb.selection_clear(1,3)
用代码进行选择和清除。

当然,tk.Listbox也可以绑定事件,还挺强大的,此篇就到这里吧。

-- EOF --

本文链接:https://www.pynote.net/archives/2134

留言区

《tk.Listbox的用法》有1条留言

您的电子邮箱地址不会被公开。 必填项已用*标注

  • 麦新杰

    Listbox的事件绑定:Listbox.bind("<<ListboxSelect>>", your_func) [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top