python tkinter listbox_Python Tkinter Listbox和Combobox控件用法
Listbox 代表一个列表框,用户可通过列表框来选择一个列表项。ttk 模块下的 Combobox 则是 Listbox 的改进版,它既提供了单行文本框让用户直接输入(就像 Entry 一样),也提供了下拉列表框供用户选择(就像 Listbox 一样),因此它被称为复合框。
程序创建 Listbox 起码需要两步:
创建 Listbox 对象,并为之执行各种选项。Listbox 除支持大部分通用选项之外,还支持 selectmode 选项,用于设置 Listbox 的选择模式。
调用 Listbox 的 insert(self, index, *elements) 方法来添加选项。从最后一个参数可以看出,该方法既可每次添加一个选项,也可传入多个参数,每次添加多个选项。index 参数指定选项的插入位置,它支持 END(结尾处)、ANCHOR(当前位置)和 ACTIVE(选中处)等特殊索引。
Listbox 的 selectmode 支持的选择模式有如下几种:
'browse':单选模式,支持按住鼠标键拖动来改变选择。
'multiple':多边模式。
'single':单边模式,必须通过鼠标键单击来改变选择。
'extended':扩展的多边模式,必须通过 CtrL 或 Shift 键辅助实现多选。
下面程序示范了 Listbox 的基本用法:
from tkinter import * # 导入ttk from tkinter import ttk class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): topF = Frame(self.master) topF.pack(fill=Y, expand=YES) # 创建Listbox组件 self.lb = Listbox(topF) self.lb.pack(side=LEFT, fill=Y, expand=YES) for item in ['Python', 'Kotlin', 'Swift', 'Ruby']: self.lb.insert(END, item) # 或直接使用多个元素来插入 self.lb.insert(ANCHOR, 'Python', 'Kotlin', 'Swift', 'Ruby') # 创建Scrollbar组件,设置该组件与self.lb的纵向滚动关联 scroll = Scrollbar(topF, command=self.lb.yview) scroll.pack(side=RIGHT, fill=Y) # 设置self.lb的纵向滚动影响scroll滚动条 self.lb.configure(yscrollcommand=scroll.set) f = Frame(self.master) f.pack() Label(f, text = '选择模式:').pack(side=LEFT) modes = ('multiple', 'browse', 'single', 'extended') self.strVar = StringVar() for m in modes: rb = ttk.Radiobutton(f, text = m, value = m, variable = self.strVar, command = self.choose_mode) rb.pack(side=LEFT) self.strVar.set('browse') def choose_mode(self): print(self.strVar.get()) self.lb['selectmode'] = self.strVar.get() root = Tk() root.title("Listbox测试") # 改变窗口图标 root.iconbitmap('images/fklogo.ico') App(root) root.mainloop()
上面程序中,第 15 行代码表示每次插入一个选项,因此程序使用循环来控制插入多个选项;第 17 行代码则表示直接插入多个选项;第 35 行代码根据用户选择来改变 Listbox 的 Selectmode 选项,这样读者可以体会 Listbox 不同选项的差异。
运行上面程序,可以看到如图 1 所示的效果:
图 1 Listbox 的运行效果
除了最常见的 insert() 方法,Listbox 还支持如下常见的操作列表项的方法:
selection_set(self, first, last=None):选中从 first 到 last(包含)的所有列表项。如果不指定 last,则直接选中 first 列表项。
selection_clear(self, first, last=None):取消选中从 first 到 last(包含)的所有列表项。如果不指定 last,则只取消选中 first 列表项。
delete(self, first, last=None):删除从 first 到 last(包含)的所有列表项。如果不指定 last,则只删除 first 列表项。
Listbox 也支持使用 Iistvariable 选项与变量进行绑定,但这个变量并不是控制 Listbox 选中哪些项,而是控制 Listbox 包含哪些项。简单来说,如果 listvariable 选项与变量进行了双向绑定,则无须调用 insert()、delete() 方法来添加、删除列表项,只要通过绑定变量即可改变 Listbox 中的列表项。
下面程序示范了操作 Listbox 中选项的方法:
from tkinter import * # 导入ttk from tkinter import ttk class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): topF = Frame(self.master) topF.pack(fill=Y, expand=YES) # 定义StringVar变量 self.v = StringVar() # 创建Listbox组件,与v变量绑定 self.lb = Listbox(topF, listvariable = self.v) self.lb.pack(side=LEFT, fill=Y, expand=YES) for item in range(20): self.lb.insert(END, str(item)) # 创建Scrollbar组件,设置该组件与self.lb的纵向滚动关联 scroll = Scrollbar(topF, command=self.lb.yview) scroll.pack(side=RIGHT, fill=Y) # 设置self.lb的纵向滚动影响scroll滚动条 self.lb.configure(yscrollcommand=scroll.set) f = Frame(self.master) f.pack() Button(f, text="选中10项", command=self.select).pack(side=LEFT) Button(f, text="清除选中3项", command=self.clear_select).pack(side=LEFT) Button(f, text="删除3项", command=self.delete).pack(side=LEFT) Button(f, text="绑定变量", command=self.var_select).pack(side=LEFT) def select(self): # 选中指定项 self.lb.selection_set(0, 9) def clear_select(self): # 取消选中指定项 self.lb.selection_clear(1,3) def delete(self): # 删除指定项 self.lb.delete(5, 8) def var_select(self): # 修改与Listbox绑定的变量 self.v.set(('12', '15')) root = Tk() root.title("Listbox测试") # 改变窗口图标 root.iconbitmap('images/fklogo.ico') App(root) root.mainloop()
上面程序中第 31 行代码控制选中列表项中第一个到第十个选项;第 34 行代码控制取消选中列表项中的 3 项; 第 37 行代码删除列表项中的 4 项;第 40 行代码通过绑定变量来改变 Listbox 中的列表项。运行上面程序,删除其中 4 项之后的运行效果如图 2 所示。
图 2 操作列表项
如果程序要获取 Listbox 当前边中的项,则可通过 curselection() 方法来实现,该方法会返回一个元组,该元组包含当前 Listbox 的所有选中项。
Listbox 并不支持使用 command 选项来绑定事件处理函数或方法,如果程序需要为 Listbox 绑定事件处理函数或方法,则可通过 bind() 方法来实现。下面程序示范了通过 bind() 方法为 Listbox 绑定事件处理方法:
from tkinter import * # 导入ttk from tkinter import ttk class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): topF = Frame(self.master) topF.pack(fill=Y, expand=YES) # 创建Listbox组件 self.lb = Listbox(topF) self.lb.pack(side=LEFT, fill=Y, expand=YES) for item in range(20): self.lb.insert(END, str(item)) # 创建Scrollbar组件,设置该组件与self.lb的纵向滚动关联 scroll = Scrollbar(topF, command=self.lb.yview) scroll.pack(side=RIGHT, fill=Y) # 设置self.lb的纵向滚动影响scroll滚动条 self.lb.configure(yscrollcommand=scroll.set) # 为双击事件绑定事件处理方法 self.lb.bind("", self.click) def click(self, event): from tkinter import messagebox # 获取Listbox当前选中项 messagebox.showinfo(title=None, message=str(self.lb.curselection())) root = Tk() root.title("Listbox测试") # 改变窗口图标 root.iconbitmap('images/fklogo.ico') App(root) root.mainloop()
上面程序中第 22 行代码为 Listbox 的左键双击事件( 绑定了事件处理方法,当用户双击 Listbox 时,程序将会触发该对象的 click 方法;在第 26 行代码则调用了 Listbox 的 curselection() 方法来获取当前选中项。
运行上面程序,双击某个列表顷,将可以看到如图 3 所示的运行效果。
图 3 为双击事件绑定事件处理方法
Combobox 的用法更加简单,程序可通过 values 选项直接为它设置多个选项。该组件的 state 选项支持‘readonly’状态,该状态代表 Combobox 的文本框不允许编辑,只能通过下拉列表框的列表项来改变。
Combobox 同样可通过 textvariable 选项将它与指定变量绑定,这样程序可通过该变量来获取或修改 Combobox 组件的值。
Combobox 还可通过 postcommand 选项指定事件处理函数或方法,当用户单击 Combobox 的下拉箭头时,程序就会触发 postcomrnand 选项指定的事件处理函数或方法。
下面程序示范了 Combobox 组件的用法:
from tkinter import * # 导入ttk from tkinter import ttk class App: def __init__(self, master): self.master = master self.initWidgets() def initWidgets(self): self.strVar = StringVar() # 创建Combobox组件 self.cb = ttk.Combobox(self.master, textvariable=self.strVar, # 绑定到self.strVar变量 postcommand=self.choose) # 当用户单击下拉箭头时触发self.choose方法 self.cb.pack(side=TOP) # 为Combobox配置多个选项 self.cb['values'] = ['Python', 'Ruby', 'Kotlin', 'Swift'] f = Frame(self.master) f.pack() self.isreadonly = IntVar() # 创建Checkbutton,绑定到self.isreadonly变量 Checkbutton(f, text = '是否只读:', variable=self.isreadonly, command=self.change).pack(side=LEFT) # 创建Button,单击该按钮激发setvalue方法 Button(f, text = '绑定变量设置', command=self.setvalue).pack(side=LEFT) def choose(self): from tkinter import messagebox # 获取Combbox的当前值 messagebox.showinfo(title=None, message=str(self.cb.get())) def change(self): self.cb['state'] = 'readonly' if self.isreadonly.get() else 'enable' def setvalue(self): self.strVar.set('我爱Python') root = Tk() root.title("Combobox测试") # 改变窗口图标 root.iconbitmap('images/fklogo.ico') App(root) root.mainloop()
上面程序中第 12 行代码将 Combobox 组件绑定到 self.strVar 变量;第 13 行代码为 Combobox 的 command 绑定了事件处理方法;第 32 行代码根据列表框的值来确定 Combobox 是否允许编辑。
运行上面程序,可以看到如图 4 所示的运行界面:
图 4 Combobox 组件
python tkinter listbox_Python Tkinter Listbox和Combobox控件用法相关推荐
- MFC之ComboBox控件用法
本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法.分享给大家供大家参考之用.具体方法如下: 一.ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的.用 ...
- VC组合框ComboBox控件用法
1.关于CComboBox在对话框中没有下拉项目的问题 答: 资源编辑器中对话框中CComboBox组件的垂直范围拉大了下,就看见字体了.先点击右边向下的箭头,然后会出现上下可调的双向箭头,拖拉即可. ...
- Tkinter Combobox控件
欢迎大家来博主的小站传送门 Combobox控件 通过前面内容的介绍我们知道 Listbox 是一个供用户从列表项中选择相应条目的控件.但在有些情况下,比如列表的项目过多时,若使用列表控件,列出所有选 ...
- Python tkinter 学习笔记(2)-- 控件、组件(二)
Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 Python tkinter 学习笔记(2)-- 控件.组件(一) > 续上一章节 Python tki ...
- Python tkinter 学习笔记(2)-- 控件、组件(一)
Python tkinter 学习笔记(1)-- 第一个窗口之HelloWorld 教程 目录 一.Tkinter 15种基础控件 1. Button 按钮控件 2.Canvas 画图控件 3.Che ...
- python的messagebox的用法_Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解...
本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 fi ...
- tkinter中分割线Separator、frame控件pack_propagate(0)、frame滚动条的用法
1.设置屏幕最大化方法: #设置窗口最大化: #方法一 root = Tk() w, h = root.maxsize() root.geometry("{}x{}".format ...
- combox高度修改 winfrom_WinForm窗体中ComboBox控件自定义高度和选项文本居中完美解决方案...
WinForm窗体中的ComboBox控件是有TextBox控件和ListBox控件组合而成,其本身是不能自定义高度的只能根据字体的大小而自动生成高度.另外,选中后的选项文本在ComboBox中显示默 ...
- 自定义ComboBox控件,完美解决C#自带的ComboBox效率慢的问题
自定义ComboBox控件,完美解决C#自带的ComboBox效率慢的问题 欢迎关注http://blog.csdn.net/aaa123524457 转载请注明出处:http://blog.csdn ...
最新文章
- Coursera: Internet History, Technology, and Security
- 微信公众平台消息接口开发(29)校验签名与消息响应合并
- 皮一皮:别人都那么努力,你还有什么理由不努力...
- python课程设计报告总结-上海python课程设计报告目的
- lua学习笔记之协程
- 【修炼1】《序章》关于要写给谁看的问题
- 问题记录,StartCoroutine(“str)问题
- CSS做个Switch开关
- BZOJ 3144 [Hnoi2013]切糕
- EF 更新大量的数据时出现重复键错误
- python中的range_python中range()与xrange()用法分析
- idea中event log_【JavaScript 教程】事件——Event 对象
- oracle 对两列加唯一性束_oracle中创建unique唯一约束(单列和多列) 。
- 百度AI学习:三、文字识别
- 基于Python+tkinter+pygame的音乐播放器完整源码
- [Bzoj2039][2009国家集训队]employ人员雇佣(最小割)
- 初学者Apache Solr教程
- 第9课:利用 Headers 的 Cookie 和 User-agent 伪装自己
- nginx日志中$request_body 十六进制字符(\\x22) 引号问题处理记录
- 有两个空酒桶,分别能舀3斤和7斤酒,还有1个装满了10斤的酒桶,我要卖5斤酒给剑客,这该如何是好?