使用Tkinter在网格中创建可滚动的Listbox
简介
Python的GUI界面库Tkinter,可以方便地创建图形用户界面。在Tkinter中,Listbox是一个很常用的组件,但是有时候我们需要在网格中,创建一个大小可变的Listbox并且支持滚动,那么这篇文章就会为你提供解决方案。
前置知识
在学习本篇文章之前,你需要对Tkinter有一定的了解,并且应该掌握如何在Tkinter中使用Grid布局以及掌握如何使用Listbox。
实现目标
我们的目标是创建一个网格,其中包含两个组件:一个Label和一个可滚动的Listbox。在这个Listbox中,我们可以添加或删除项目,并能够滚动以查看所有项目。
实现步骤
- 导入Tkinter库中的所有模块。
from tkinter import *
from tkinter import ttk
- 创建主窗口,并为其定义一个标题。
root = Tk()
root.title('可滚动Listbox')
- 定义网格中的Label和Listbox。
# Label组件
text_label = Label(root, text='List of Items:', font=('Arial', 14))
text_label.grid(column=0, row=0, padx=5, pady=5, sticky='w')
# Scrolled Listbox组件
listbox = Listbox(root, width=50, height=10)
listbox.grid(column=0, row=1, padx=5, pady=5)
# 添加多个项目
for i in range(1,51):
listbox.insert(END, 'Item %d' % i)
- 创建Scrollbar组件,使得Listbox能够进行滚动。
# Scrollbar
scrollbar = ttk.Scrollbar(root, orient=VERTICAL, command=listbox.yview)
scrollbar.grid(column=1, row=1, padx=5, pady=5, sticky='ns')
listbox.config(yscrollcommand=scrollbar.set)
- 通过绑定事件来创建添加或删除项目的功能。
# 添加项目
def add():
listbox.insert(END, 'New Item')
# 删除项目
def delete():
if listbox.curselection():
listbox.delete(ANCHOR)
# 添加按钮
add_button = ttk.Button(root, text='Add Item', command=add)
add_button.grid(column=0, row=2, padx=5, pady=5)
# 删除按钮
delete_button = ttk.Button(root, text='Delete Item', command=delete)
delete_button.grid(column=1, row=2, padx=5, pady=5)
- 运行窗口,查看最终效果。
root.mainloop()
完整代码如下:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('可滚动Listbox')
# Label组件
text_label = Label(root, text='List of Items:', font=('Arial', 14))
text_label.grid(column=0, row=0, padx=5, pady=5, sticky='w')
# Scrolled Listbox组件
listbox = Listbox(root, width=50, height=10)
listbox.grid(column=0, row=1, padx=5, pady=5)
# 添加多个项目
for i in range(1,51):
listbox.insert(END, 'Item %d' % i)
# Scrollbar
scrollbar = ttk.Scrollbar(root, orient=VERTICAL, command=listbox.yview)
scrollbar.grid(column=1, row=1, padx=5, pady=5, sticky='ns')
listbox.config(yscrollcommand=scrollbar.set)
# 添加项目
def add():
listbox.insert(END, 'New Item')
# 删除项目
def delete():
if listbox.curselection():
listbox.delete(ANCHOR)
# 添加按钮
add_button = ttk.Button(root, text='Add Item', command=add)
add_button.grid(column=0, row=2, padx=5, pady=5)
# 删除按钮
delete_button = ttk.Button(root, text='Delete Item', command=delete)
delete_button.grid(column=1, row2, padx=5, pady=5)
root.mainloop()
解释说明
- 在上述代码中,我们首先导入了需要使用的Tkinter组件包。
-
我们随后创建了一个主窗口,并为其设置了标题。
-
接着,我们使用Grid布局创建了一个Label和一个Listbox。在该Listbox中,我们插入了50个项目作为初始项。
-
为了实现Listbox的滚动,我们创建了一个Scrollbar组件,并同时将其关联到了Listbox上。
-
最后,我们绑定了添加、删除项目的事件,并通过两个按钮来实现相应功能。
-
运行窗口,可以看到一个可滚动的Listbox。
结论
使用Tkinter中的组件,我们可以方便地创建GUI界面,并实现我们需要的各种功能,如Listbox的滚动,或者根据用户的交互,动态添加或删除项。这让我们的GUI界面在使用方便性和交互性上更上一层楼。