Python进阶(三)-图形界面编程Tkinter(3)

三、Tkinter创建图像界面3

3.1 组件介绍

3.1.1 Listbox列表框

首先介绍一下列表框,即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中,如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。用户可以通过列表框来选择一个列表项。它长成这样:
在这里插入图片描述
创建Listbox列表框需要以下两步:

  1. 创建Listbox对象,并为之执行各种选项。
  2. 调用Listbox的insert(self,index,*elements)方法添加选项。其中,index参数指定选项的插入位置,支持END(结尾处)、ANCHOR(当前位置)和ACTIVE(选中处)等特殊索引。
  3. 指定Listbox的选择模式selectmode参数:
  • ‘browse’:单选模式,支持按住鼠标键拖动来改变选择
  • ‘multiple’:多选模式
  • ‘single’:单选模式,必须通过鼠标键单击来改变选择
  • ‘extended‘:扩展的多选模式,必须通过Ctrl或Shift键来辅助实现多选

下面对列表框控件(Listbox)的常用方法做简单的介绍:

方法 说明
activate(index) 将给定索引号对应的选项激活,即文本下方画一条下划线
bbox(index) 返回给定索引号对应的选项的边框,返回值是一个以像素为单位的 4 元组表示边框:(xoffset, yoffset, width, height), xoffset 和 yoffset 表示距离左上角的偏移位置
curselection() 返回一个元组,包含被选中的选项序号(从 0 开始)
delete(first, last=None) 删除参数 first 到 last 范围内(包含 first 和 last)的所有选项
get(first, last=None) 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本
index(index) 返回与 index 参数相应选项的序号
itemcget(index, option) 获得 index 参数指定的项目对应的选项(由 option 参数指定)
itemconfig(index, **options) 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定)
nearest(y) 返回与给定参数 y 在垂直坐标上最接近的项目的序号
selection_set(first, last=None) 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态,使用 selection_includes(序号) 可以判断选项是否被选中。
size() 返回 Listbox 组件中选项的数量
xview(*args) 该方法用于在水平方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现。 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端;如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:xview(“scroll”, 2, “pages”)表示向右滚动二行。
yview(*args) 该方法用于在垂直方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现

除了共有属性之外,列表框控件也有一些其他属性,如下表所示:

属性 说明
listvariable 1. 指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目2. 在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set(“c c++ java python”)
selectbackground 指定当某个项目被选中的时候背景颜色,默认值由系统指定
selectborderwidth 1. 指定当某个项目被选中的时候边框的宽度2. 默认是由 selectbackground 指定的颜色填充,没有边框3. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 “raised” 样式
selectforeground 指定当某个项目被选中的时候文本颜色,默认值由系统指定
selectmode 决定选择的模式,tk 提供了四种不同的选择模式,分别是:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现),默认是 “browse”
setgrid 指定一个布尔类型的值,决定是否启用网格控制,默认值是 False
takefocus 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认值是 True
xscrollcommand 为 Listbox 组件添加一条水平滚动条,将此选项与 Scrollbar 组件相关联即可
yscrollcommand 为 Listbox 组件添加一条垂直滚动条,将此选项与 Scrollbar 组件相关联即可
  1. 创建列表框控件
    下面看一组简单的示例,并对 Listbox 控件做进一步讲解,首先创建一个列表框控件:
# 创建一个列表控件,并增加相应的选项
from tkinter import *
# 创建主窗口
win = Tk()
win.title("Python")
win.geometry('400x200')
win.iconbitmap('C:/Users/Administrator/Desktop/logo.ico')
# 创建列表选项
listbox1 =Listbox(win)
listbox1.pack()
# i表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(["C","C++","C#","Python","Java"]):
    listbox1.insert(i,item)
#直接插入多个选项
#listbox1.insert("C","C++","C#","Python","Java")
# 显示窗口
win.mainloop()

除了上述使用 enumerate() 来实现选项插入的方法外,我们还可以使用 “end” 实现,它表示将选项插入到最后一个位置,所以“Java”一定会被插入到最后一个位置上,而之前的选项会依次向前排列,如下所示:

from tkinter import *
# 创建主窗口
win = Tk()
win.title("Python")
win.geometry('400x200')
win.iconbitmap('C:/Users/Administrator/Desktop/logo.ico')
# 创建列表选项
listbox1 =Listbox(win)
listbox1.pack()
# i表示索引值,item 表示值,根据索引值的位置依次插入
for item in ["C","C++","C#","Python","Java"]:
    listbox1.insert("end",item)
# 显示窗口
win.mainloop()
  1. 增加滚动条和删除功能
    下面为上述示例增加一个滚动条和选项的删除功能,如下所示:
from tkinter import *
# 创建主窗口
win = Tk()
win.title("Python")
win.geometry('400x180')
win.iconbitmap('C:/Users/Administrator/Desktop/logo.ico')
# 创建滚动条
s = Scrollbar(win)
# 设置垂直滚动条显示的位置,使得滚动条,靠右侧;通过 fill 沿着 Y 轴填充
s.pack(side = RIGHT,fill = Y)
# 将 selectmode 设置为多选模式,并为Listbox控件添加滚动条
listbox1 =Listbox(win,selectmode = MULTIPLE,height =5, yscrollcommand = s.set)
# i 表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(range(1,50)):
    listbox1.insert(i,item)
listbox1.pack()
# 设置滚动条,使用 yview使其在垂直方向上滚动 Listbox 组件的内容,通过绑定 Scollbar 组件的 command 参数实现
s.config(command = listbox1.yview)
# 使用匿名函数,创建删除函数,点击删除按钮,会删除选项
bt = Button(win,text='删除',command = lambda x = listbox1:x.delete(ACTIVE))
# 将按钮放置在底部
bt.pack(side = BOTTOM)
# 显示窗口
win.mainloop()
  1. StringVar() 添加列表选项
    下面演示实现两个功能:
  • 如何通过 StringVar() 方法动态地获取列表框中的所有选项,listvariable参数
  • 如何通过StringVar()方法获取选中的列表项,curselection()方法
    示例代码如下:
import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.title("Python")
window.geometry('400x180')
window.iconbitmap
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值