ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

10.Tkinter列表框和组合框控件

2022-08-01 12:33:41  阅读:150  来源: 互联网

标签:选项 控件 列表框 tkinter 10 win Combobox Listbox


列表框(Listbox)和复选框(Combobox)是 Tkinter 中两个控件,由于其非常相似,本节将它们放在一起进行介绍。

Listbox控件

首先介绍一下列表框,即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中,如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。

下面对列表框控件(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 1. 指定当某个项目被选中的时候背景颜色,默认值由系统指定
selectborderwidth 1. 指定当某个项目被选中的时候边框的宽度
2. 默认是由 selectbackground 指定的颜色填充,没有边框
3. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 "raised" 样式
selectforeground 1. 指定当某个项目被选中的时候文本颜色,默认值由系统指定
selectmode 1. 决定选择的模式,tk 提供了四种不同的选择模式,分别是:"single"(单选)、"browse"(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、"multiple"(多选)和 "extended"(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现),默认是 "browse"
setgrid 指定一个布尔类型的值,决定是否启用网格控制,默认值是 False
takefocus 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认值是 True
xscrollcommand 为 Listbox 组件添加一条水平滚动条,将此选项与 Scrollbar 组件相关联即可
yscrollcommand 为 Listbox 组件添加一条垂直滚动条,将此选项与 Scrollbar 组件相关联即可

1) 创建列表框控件

下面看一组简单的示例,并对 Listbox 控件做进一步讲解,首先创建一个列表框控件:

  1. # 创建一个列表控件,并增加相应的选项
  2. from tkinter import *
  3. # 创建主窗口
  4. win = Tk()
  5. win.title("C语言中文网")
  6. win.geometry('400x200')
  7. win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
  8. # 创建列表选项
  9. listbox1 =Listbox(win)
  10. listbox1.pack()
  11. # i表示索引值,item 表示值,根据索引值的位置依次插入
  12. for i,item in enumerate(["C","C++","C#","Python","Java"]):
  13. listbox1.insert(i,item)
  14. # 显示窗口
  15. win.mainloop()

程序运行结果如下所示:

tkinter listbox
图1:Listbox列表框控件


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

  1. from tkinter import *
  2. # 创建主窗口
  3. win = Tk()
  4. win.title("C语言中文网")
  5. win.geometry('400x200')
  6. win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
  7. # 创建列表选项
  8. listbox1 =Listbox(win)
  9. listbox1.pack()
  10. # i表示索引值,item 表示值,根据索引值的位置依次插入
  11. for item in ["C","C++","C#","Python","Java"]:
  12. listbox1.insert("end",item)
  13. # 显示窗口
  14. win.mainloop()

程序运行结果:

tkinter listbox
图2:tkinter Listbox控件

2) 增加滚动条和删除功能

下面为上述示例增加一个滚动条和选项的删除功能,如下所示:

  1. from tkinter import *
  2. # 创建主窗口
  3. win = Tk()
  4. win.title("C语言中文网")
  5. win.geometry('400x180')
  6. win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
  7. # 创建滚动条
  8. s = Scrollbar(win)
  9. # 设置垂直滚动条显示的位置,使得滚动条,靠右侧;通过 fill 沿着 Y 轴填充
  10. s.pack(side = RIGHT,fill = Y)
  11.  
  12. # 将 selectmode 设置为多选模式,并为Listbox控件添加滚动条
  13. listbox1 =Listbox(win,selectmode = MULTIPLE,height =5, yscrollcommand = s.set)
  14. # i 表示索引值,item 表示值,根据索引值的位置依次插入
  15. for i,item in enumerate(range(1,50)):
  16. listbox1.insert(i,item)
  17. listbox1.pack()
  18. # 设置滚动条,使用 yview使其在垂直方向上滚动 Listbox 组件的内容,通过绑定 Scollbar 组件的 command 参数实现
  19. s.config(command = listbox1.yview)
  20.  
  21. # 使用匿名函数,创建删除函数,点击删除按钮,会删除选项
  22. bt = Button(win,text='删除',command = lambda x = listbox1:x.delete(ACTIVE))
  23. # 将按钮放置在底部
  24. bt.pack(side = BOTTOM)
  25. # 显示窗口
  26. win.mainloop()

程序运行结果,如下所示:

tkinter listbox控件
图3:tkinter listbox控件

3) StringVar() 添加列表选项

下面演示如何通过  StringVar() 方法动态地获取列表框中的选项,示例代码如下:

  1. import tkinter as tk
  2. from tkinter import messagebox
  3.  
  4. window = tk.Tk()
  5.  
  6. window.title("C语言中文网")
  7. window.geometry('400x180')
  8. window.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
  9.  
  10. # 创建变量,用var1用来接收鼠标点击的具体选项内容
  11. var1 = tk.StringVar()
  12. l = tk.Label(window, bg='#B0B0B0', font=('微软雅黑', 15), width=20, textvariable=var1)
  13. l.pack()
  14.  
  15. # 创建一个按钮的点击事件
  16. def click_button():
  17. # 使用 curselection来选中文本
  18. try:
  19. val = lb.get(lb.curselection())
  20. # 设置label值
  21. var1.set(val)
  22. except Exception as e:
  23. e = '发现一个错误'
  24. messagebox.showwarning(e,'没有选择任何条目')
  25.  
  26. # 创建一个按钮并放置,点击按钮调用print_selection函数
  27. b1 = tk.Button(window, text='获取当前选项', command=click_button)
  28. b1.pack()
  29.  
  30.  
  31. # 创建Listbox并为其添加内容
  32. var2 = tk.StringVar()
  33. var2.set(("C语言辅导班", "Python答疑辅导", "Java答疑辅导", "C++辅导"))
  34. # 创建Listbox,通过 listvariable来传递变量
  35. lb = tk.Listbox(window, listvariable=var2)
  36. # 新建一个序列,然后将值循环添加到Listbox控件中
  37. items = ["C", "Java", "Python", "C#", "Golang", "Runby"]
  38. for i in items:
  39. lb.insert('end', i) # 从最后一个位置开始加入值
  40. lb.insert(0, '编程学习') # 在第一个位置插入一段字符串
  41. lb.delete(4) # 删除第2个位置处的索引
  42. lb.pack()
  43.  
  44. #主窗显示
  45. window.mainloop()

程序运行结果如下:

tkinter listbox
图4:tkinter Listbox控件

Combobox控件

通过前面内容的介绍我们知道 Listbox 是一个供用户从列表项中选择相应条目的控件。但在有些情况下,比如列表的项目过多时,若使用列表控件,列出所有选项就会显得界面格外臃肿,这时就需要用到 Combobox 控件,也就是下拉菜单控件(或称复合框),该控件是列表控件的改进版,具有更加灵活的界面,因此其应用场景相比于前者要更加广泛。

不过需要注意的是 Combobox 并不包含在 tkinter 模块中,而是包含在tkinter.ttk子模块中,因此若想使用 Combobox 控件,需要使用下面的导包方式:

from tkinter import ttk

下面对 Combobox 控件做简单的介绍,其语法格式如下所示:

cbox=Combobox(窗口对象,[参数列表])

Combobox 控件在形式虽然与列表控件存在不同,但它们的本质是相同,因此属性和方法是通用的。

对于 Combobox 控件而言,它常用的方法有两个,分别是 get() 和 current(),前者表示获取当前选中选项的内容,后者表示获取选中选项的索引值。下面通过一组简单的示例进一步了解 Combobox 控件,示例代码如下:

  1. import tkinter
  2. from tkinter import ttk # 导入ttk模块,下拉菜单控件位于ttk子模块中
  3.  
  4. # 创建窗口
  5. win = tkinter.Tk()
  6. win.title("C语言中文网")
  7. # win.geometry('400x200')
  8. win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
  9. win.geometry('400x250')
  10. win.resizable(0,0)
  11. # 创建下拉菜单
  12. cbox = ttk.Combobox(win)
  13. # 使用 grid() 来控制控件的位置
  14. cbox.grid(row = 1, sticky="NW")
  15. # 设置下拉菜单中的值
  16. cbox['value'] = ('C','C#','Go','Python','Java')
  17.  
  18. #通过 current() 设置下拉菜单选项的默认值
  19. cbox.current(3)
  20.  
  21. # 编写回调函数,绑定执行事件,向文本插入选中文本
  22. def func(event):
  23. text.insert('insert',cbox.get()+"\n")
  24. # 绑定下拉菜单事件
  25. cbox.bind("<<ComboboxSelected>>",func)
  26. # 新建文本框
  27. text = tkinter.Text(win)
  28. # 布局
  29. text.grid(pady = 5)
  30. win.mainloop()

程序运行结果:

tkinter combobox控件
图5:tkinter Combobox控件

 

标签:选项,控件,列表框,tkinter,10,win,Combobox,Listbox
来源: https://www.cnblogs.com/55zjc/p/16539753.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有