控件之Listbox Combobox Spinbox

2024-06-19 03:32

本文主要是介绍控件之Listbox Combobox Spinbox,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#Listbox:
Listbox 代表一个列表框,用户可通过列表框来选择一个列表项。
ttk 模块下的 Combobox 则是 Listbox 的改进版,它既提供了单行文本框让用户直接输入(就像 Entry 一样),
也提供了下拉列表框供用户选择(就像 Listbox 一样),因此它被称为复合框。创建 Listbox 两步:
1.创建 Listbox 对象,并为之执行各种选项。Listbox 除支持大部分通用选项之外,还支持 selectmode 选项,
用于设置 Listbox 的选择模式。
2.调用 Listbox 的 insert(self, index, *elements) 方法来添加选项。从最后一个参数可以看出,
该方法既可每次添加一个选项,
也可传入多个参数,每次添加多个选项。index 参数指定选项的插入位置,它支持 
END(结尾处)、ANCHOR(当前位置)和 ACTIVE(选中处)等特殊索引。Listbox 的 selectmode 支持的选择模式有如下几种:
'browse':单选模式,支持按住鼠标键拖动来改变选择。
'multiple':多边模式。
'single':单边模式,必须通过鼠标键单击来改变选择。
'extended':扩展的多边模式,必须通过 CtrL 或 Shift 键辅助实现多选。
除了最常见的 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 也支持使用 listvariable 选项与变量进行绑定,但这个变量并不是控制 Listbox 选中哪些项,
而是控制 Listbox 包含哪些项。简单来说,如果 listvariable 选项与变量进行了双向绑定,
则无须调用 insert()、delete() 方法来添加、删除列表项,只要通过绑定变量即可改变 Listbox 中的列表项。如果程序要获取 Listbox 当前选中的项,则可通过 curselection() 方法来实现,该方法会返回一个元组,
该元组包含当前 Listbox 的选中项。
Listbox 并不支持使用 command 选项来绑定事件处理函数或方法,如果程序需要为 Listbox 绑定事件处理函数或方法,
则可通过 bind() 方法来实现。
#Combobox:
Combobox 的用法更加简单,程序可通过 values 选项直接为它设置多个选项。Combobox 还可通过 postcommand 选项指定事件处理函数或方法,当用户单击 Combobox 的下拉箭头时,
程序就会触发 postcomrnand 选项指定的事件处理函数或方法。该组件的 state 选项支持‘readonly’只读和’enable‘读写状态,该状态代表 Combobox 的文本框不允许编辑,
只能通过下拉列表框的列表项来改变。Combobox 同样可通过 textvariable 选项将它与指定变量绑定,这样程序可通过该变量来获取或修改 Combobox 组件的值。
#Spinbox:
Spinbox 控件是一个带有两个小箭头的文本框,用户既可以通过两个小箭头上下调整该组件内的值,
也可以直接在文本框内输入内容作为该组件的值。Spinbox 本质上也相当于持有一个列表框,这一点类似于 Combobox,但 Spinbox 不会展开下拉列表供用户选择。
Spinbox 只能通过向上、向下箭头来选择不同的选项。在使用 Spinbox 组件时,既可通过 from(由于 from 是关键字,实际使用时写成 from_)、to、increment 选项来指定
选项列表,也可通过 values 选项来指定多个列表项,该选项的值可以是 list 或 tuple。Spinbox 同样可通过 textvariable 选项将它与指定变量绑定,这样程序即可通过该变量来获取或修改 Spinbox 组件的值。Spinbox 还可通过 command 选项指定事件处理函数或方法,即当用户单击 Spinbox 的向上、向下箭头时,
程序就会触发 command 选项指定的事件处理函数或方法。
from tkinter import *
from tkinter import ttkroot = Tk()
root.resizable(0,0)tabControl = ttk.Notebook(root)  #窗口下创建Notebook
tabControl.pack(expand=1, fill="both")  # 添加notebook,窗口显示tab1 = Frame(tabControl)  # notebook下创建frame
tabControl.add(tab1, text='Listbox')  # 添加frame到notebook显示tab2 = Frame(tabControl)  # Add a second tab
tabControl.add(tab2, text='Combobox')  # Make second tab visibletab3 = Frame(tabControl)
tabControl.add(tab3, text='Spinbox')#------------------------Listbox-------------------------
firstF = Frame(tab1)
firstF.pack(fill=Y, expand=YES)
#创建Listbox:
lb = Listbox(firstF)
lb.pack(side=LEFT, fill=Y, expand=YES)
#创建Listbox的变量:先创建后赋值,反之则为listbox为空
strVar2 = StringVar()
lb['listvariable'] = strVar2prolans = ['Java','C','C++','VB','PHP','C#','Python','Perl','Delphi','JavaScript','Ruby']for prolan in prolans:lb.insert(END, prolan)
# 或直接使用多个元素来插入,anchor当前位置
lb.insert(ANCHOR, 'D', 'PL/SQL', 'SAS', 'Logo')# 创建Scrollbar:
scroll = Scrollbar(firstF, command=lb.yview)
scroll.pack(side=RIGHT, fill=Y)
lb.configure(yscrollcommand=scroll.set)#创建模式单选按钮
secondF = Frame(tab1)
secondF.pack()def choose_mode():print(strVar1.get())lb['selectmode'] = strVar1.get()modes = ('browse','single','multiple','extended')
strVar1 = StringVar()
for mode in modes:rb = Radiobutton(secondF, text=mode, value=mode,variable=strVar1, command=choose_mode)rb.pack(side=LEFT)
strVar1.set('browse')#创建操作列表项的按钮
thirdF = Frame(tab1)
thirdF.pack()def select():lb.selection_set(0, 5)
def clear_select():lb.selection_clear(1, 3)
def delete():lb.delete(0,2)
def var_select():strVar2.set(('Python', 'PHP','C'))
def var_all():strVar2.set(('Java','C','C++','VB','PHP','C#','Python','Perl','Delphi','JavaScript','Ruby','D', 'PL/SQL', 'SAS', 'Logo'))Button(thirdF, text="选中5项", command=select).pack(side=LEFT)
Button(thirdF, text="取消选中3项", command=clear_select).pack(side=LEFT)
Button(thirdF, text="删除3项", command=delete).pack(side=LEFT)
Button(thirdF, text="绑定变量", command=var_select).pack(side=LEFT)
Button(thirdF, text="显示全部", command=var_all).pack(side=LEFT)# 为双击事件绑定事件处理方法
def doubleclick(event):from tkinter import messageboxmessagebox.showinfo(title=None, message=str(lb.curselection()))messagebox.showinfo(title=None, message=lb.curselection())lb.bind("<Double-1>", doubleclick)#------------------------Combobox-------------------------
forthF = Frame(tab2)
forthF.pack()def choose():from tkinter import messageboxmessagebox.showinfo(title=None, message=cb.get())#strVar4.get()
def change():print(intVar1.get())cb['state'] = 'readonly' if intVar1.get() else 'enable'
def setvalue():strVar3.set('Python')strVar3 = StringVar()
cb = ttk.Combobox(forthF,textvariable=strVar3,postcommand=choose)#创建
cb.pack(side=TOP)#显示
cb['values'] = ['Python', 'C', 'C++', 'Java']#赋值
strVar3.set('C')intVar1 = IntVar()#或BooleanVar()
Checkbutton(forthF, text='只读', variable=intVar1,command=change).pack(side=LEFT)Button(forthF, text='绑定变量',command=setvalue).pack(side=LEFT)#------------------------Spinbox-------------------------Label(tab3, text='指定from、to、increment').pack()
sb1 = Spinbox(tab3, from_ = 20,to = 100,increment = 5)
sb1.pack()def press():print(sb2.get())Label(tab3, text='指定values').pack()
sb2 = Spinbox(tab3,values=('Python', 'C', 'C++', 'Java'),command=press)
sb2.pack()Label(tab3, text='绑定变量').pack()
intVar = IntVar()
sb3 = Spinbox(tab3,values=list(range(20, 100, 4)),textvariable=intVar,command=press)
sb3.pack()
intVar.set(33)root.mainloop()

 

这篇关于控件之Listbox Combobox Spinbox的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073889

相关文章

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

C# 通过拖控件移动窗体

目录 引言一、通过控件事件移动窗体1、创建窗体界面2、添加控件事件3、添加代码 二、通过windowsAPI移动窗体1、 构建窗体和添加事件2、代码展示 引言 在C#Form窗体设计中,如果我们不需要使用默认边框设计自己个性化的窗体(FromBorderStyle=none时),这时候你会发现拖动窗体的功能就没有了,这里需要自己构建方法让用户可以拖动整个窗体,这里我们使用前辈的

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTab

ASP.NET手动触发页面验证控件事件

开发环境:.NET Framework 3.5.1 sp1 参考文章: http://www.codeproject.com/KB/aspnet/JavascriptValidation.aspx http://msdn.microsoft.com/zh-cn/library/aa479045.aspx http://www.cnblogs.com/minsentinel/archive/

兔子--计算listview的高度,解决listview与scrollview控件冲突

/** * 计算ListView的高度 * * @param listView */ public void setListViewHeightBasedOnChildren(ListView listView) { // 获取ListView对应的Adapter OrderGoodsAdapter listAdapter = (OrderGoodsAdapter) listView.getAda