前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

Python GUI 编程:tkinter 初学者入门指南——列表框

在本文中,将介绍如何使用 tkinter Listbox 小部件来显示项目列表。Listbox 小部件是显示单行文本项的列表,允许浏览项目并一次选择一个或多个项目。

要创建 Listbox 列表框,请使用如下所示的构造函数。

listbox = tk.Listbox(master, **options)

使用 insert() 方法添加列表项

要将选项填充到 Listbox,首先创建一个选项列表。然后,使用 insert() 方法将列表内容插入列表框。

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

listbox = tk.Listbox(
    root,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox.pack(expand=True)
for item in langs:
    listbox.insert(tk.END, item)

root.mainloop()

其中,选择模式 selectmode,该选项确定可以选择的数量以及鼠标拖动将如何影响选项。

  • tk.BROWSE– 允许单个选择。
  • tk.EXTENDED– 通过单击第一项并拖动,选择任何相邻的多个选项。
  • tk.SINGLE– 允许选择一行,并且不能拖动鼠标。
  • tk.MULTIPLE– 鼠标单击选中任意行。

使用 listvariable 参数添加列表项

更简单的方法是使用 listvariable 参数,该参数必须设置为 StringVar 对象。

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

var = tk.StringVar()
var.set(langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox.pack(expand=True)

root.mainloop()

向列表框添加滚动条

以上代码示例创建了一个包含 9 个选项的列表框。如果列表框的 height 参数设置小于选项的数量,列表框需要滑动查看,可以向列表框添加滚动条。

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

var = tk.StringVar()
var.set(langs)

listbox1 = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox1.pack(expand=True)

scrollbar = tk.Scrollbar(root, orient=tk.VERTICAL)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

listbox2 = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED,
    yscrollcommand=scrollbar.set
)
listbox2.pack(expand=True)
scrollbar.config(command=listbox2.yview)
root.mainloop()

获取选定的项目

使用 get() 方法,可以获取列表框的内容。

get(first, last=None )

可以利用索引号获取多个项目。

import tkinter as tk
root = tk.Tk()
from tkinter.messagebox import showinfo
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

def get_item():
    getval=listbox.get('active')
    msg = f'你选择: {getval}'
    showinfo(title='提示', message=msg)

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

var = tk.StringVar()
var.set(langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox.pack(pady=60)

button=tk.Button(root, text='获取选定内容', command=get_item)
button.pack()

root.mainloop()

使用 curselection() 方法,可以获取一个或多个所选元素的索引号,通过索引号获取所选内容。

import tkinter as tk
root = tk.Tk()
from tkinter.messagebox import showinfo
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

def get_item():
    getval1=listbox.curselection()
    getval2=",".join([listbox.get(i) for i in getval1])
    msg = f'你选择: {getval2}'
    showinfo(title='提示', message=msg)

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

var = tk.StringVar()
var.set(langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox.pack(pady=60)

button=tk.Button(root, text='获取选定内容', command=get_item)
button.pack()

root.mainloop()

删除项目

如果不再需要列表框中的某些选项,可以简单地使用 delete() 方法将其删除。

delete(first, last=None)

可以利用索引号删除多个项目。

import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')

def delete_selected():
    listbox.delete('active')
def delete_all():
    listbox.delete(0,'end')

langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']

var = tk.StringVar()
var.set(langs)

listbox = tk.Listbox(
    root,
    listvariable=var,
    height=6,
    width=20,
    selectmode=tk.EXTENDED
)
listbox.pack(pady=60)

button1=tk.Button(root, text='删除所选项目', command=delete_selected)
button1.pack()
button2=tk.Button(root, text='删除所有项目', command=delete_all)
button2.pack()
root.mainloop()

其他常用方法:

方法

说明

activate(index)

选择给定索引指定的行。

index(i)

获取项目的索引号。

nearest(y)

返回相对于列表框小部件最接近 y 坐标 y 的可见行的索引。

see(index)

调整列表框的位置,使索引引用的行可见。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言