2020年7月5日 / 3,625次阅读 / Last Modified 2020年7月5日
tkinter
终于在项目中用到了tk.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有好几种选择模式(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,单选,但不响应鼠标的移动,也是操作上的细节稍有不同,请同学自己尝试。
我可以可以用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()
运行效果:
如果是在可多选的情况下,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()
在selectmode=tk.EXTENDED时,选中了后面三项,通过绑定Listbox的变量list_str.get()函数,直接得到了整个内容tuple,然后我们还有index tuple,有这两样,就可以直接提取具体的内容了。
再说一下Listbox绑定变量的set函数,跟其它tk控件绑定变量的set函数一样,直接修改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条留言
前一篇:str对象的常用函数
后一篇:ttk.Combobox的用法
©Copyright 麦新杰 Since 2019 Python笔记
Listbox的事件绑定:Listbox.bind("<<ListboxSelect>>", your_func) [ ]