@TOC
本篇文章主要python第三方库Tkinter库的使用,包括输入框(Entry)控件,Spinbox控件,Listbox(列表框)控件和Combobox(复合框)控件它们的常用属性和方法以及具体的示例和相应的效果图。
输入框(Entry)控件可以向用户提供单行文本框,用来接收用书输入的值,从而实现GUI程序与用户的交互。它只能接收用户的一行文字,对于多行文字,要使用文本(Text)控件。
输入框(Text)控件除了具有共有属性外,也有一些自身的特殊属性,如下:
属性名称 | 说明 |
---|---|
exportselection | 默认情况下,写在输入框内的文本将被自动复制到剪贴板。如果要忽略这个功能,可以设置为 exportselection=0 |
selectbackground | 选中文字时的背景颜色 |
selectforeground | 选中文字时的前景色 |
show | 指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show="*" |
textvariable | 输入框内值,也称动态字符串,使用 StringVar() 对象来设置,而 text 为静态字符串对象 |
xscrollcommand | 设置输入框内容滚动条,需要和Scrollbar 组件相关联 |
它并没有直接的默认文本的属性,不过可以使用insert方法来达到这样的效果。
下面是Entry控件常用的一些方法:
方法 | 描述 |
---|---|
get() | 获取控件内的文本 |
index(index) | 用于将光标放在指定索引处写入的字符的左边 |
insert(index,s) | 用于在放置在指定索引处的字符之前插入指定的字符串 |
delete(first,last=none) | 用于删除控件内的指定字符 |
select_clear() | 如果已经做了一些选择,它将清除选择 |
select_present() | 如果条目中的某些文本被选中,它返回真,否则返回假 |
xview(index) | 它用于将条目控件与水平滚动条联系起来 |
xview_scroll(number,what) | 它用于使条目可以水平滚动 |
除此之外,它还提供了对输入内容的验证功能的参数:
参数 | 描述 |
---|---|
validate | 指定验证方式,字符串参数,参数值有 focus、focusin、focusout、key、all、none。 对应着什么时候验证,比如focus是当Entry获得或失去焦点的时候验证,key是当输入框被编辑的时候验证 |
validatecommand | 指定用户自定义的验证函数,该函数只能返回 True 或者 Fasle |
invalidcommand | 当 validatecommand 指定的验证函数返回 False 时,可以使用该参数值再指定一个验证函数。 |
以下是加了一些参数的各种示例
import tkinter as tk # 导入图形界面库tkinter
from tkinter import messagebox # 导入消息框组件
# 创建窗口
window = tk.Tk()
# 设置窗口标题
window.title("Entry")
# 设置窗口大小
window.geometry("300x200")
# 定义一个函数,用于验证数字输入
def check_int():
if not entry4.get().isdigit():
messagebox.showerror("错误", "请输入数字!")
entry4.delete(0, "end")
return True
try:
int(entry4.get())
return True
except ValueError:
messagebox.showerror("错误", "请输入数字!")
entry4.delete(0, "end")
return False
# 创建一个Scrollbar组件,用于滚动条
scrollbar = tk.Scrollbar(window,orient="horizontal")
# 将Scrollbar组件放置在窗口中
scrollbar.grid(row=2,column=0,sticky="we")
# 示例1:创建Entry组件并设置初始值
label1 = tk.Label(window,text="默认文本效果:",font=("../font/jian.ttf",16))
label1.grid(row=0,column=0)
# 创建Entry组件
entry = tk.Entry(window, width=20,fg="skyblue")
# 设置Entry组件的初始值
entry.insert(0, "请输入内容")
# 将Entry组件放置在窗口中
entry.grid(row=0, column=1)
# 示例2:密码框
label2 = tk.Label(window,text="密码效果:",font=("../font/jian.ttf",16))
label2.grid(row=1,column=0)
# 创建密码框
entry2 = tk.Entry(window, width=20, show="*",bg="antiquewhite")
# 设置密码框的初始值
entry2.insert(0, "请输入密码")
# 将密码框放置在窗口中
entry2.grid(row=1, column=1)
# 示例3:水平滚动条:
label3 = tk.Label(window,text="水平滚动条:",font=("../font/jian.ttf",16))
label3.grid(row=2,column=0)
# 创建水平滚动条
entry3 = tk.Entry(window, width=20,xscrollcommand=scrollbar.set)
scrollbar.config(command=entry3.xview)
entry3.insert(0, "请输入内容,内容过长时会出现滚动条")
entry3.grid(row=2, column=1)
# 示例4:验证数字输入
label4 = tk.Label(window,text="验证数字输入:",font=("../font/jian.ttf",16))
label4.grid(row=3,column=0)
# 创建验证数字输入的Entry组件
entry4 = tk.Entry(window, width=20, validate="key", validatecommand=check_int)
entry4.grid(row=3, column=1)
# 运行窗口
window.mainloop()
PS:其中的font字体是我下载到本地的地址,地址可适当修改,否则会报错。
Spinbox 是 Entry 控件的升级版,该控件不仅允许用户直接输入内容,还支持用户使用微调选择器(即上下按钮调节器)来输入内容。在一般情况下,Spinbox 控件用于在固定的范围内选取一个值的时候使用。
属性 | 说明 |
---|---|
from_ | 该参数和to一起使用,一起用于指定数值的范围 |
to | 和from_参数一起使用,指定数值的结束数值 |
increment | 指定每次递增或递减的精度 |
wrap | 默认为false,,当输入框中的值是第一个(最后一个)的时候,再点击向上(向下)调节箭头,内容不会改变,为true时则相反。 |
values | 也可以通过这个参数传入值来限定输入输入内容 |
import tkinter as tk
# 实例化Tk()
window = tk.Tk()
# 设置窗口大小和标题
window.geometry("300x200")
window.title("Spinbox")
# 创建Spinbox控件并设置属性
spinbox = tk.Spinbox(window, from_=0, to=100, width=10,font=('../font/jian.ttf',14),increment=5,wrap=True)
spinbox.pack()
# 创建Spinbox2控件并放置
spinbox2 = tk.Spinbox(window, values=('Python', 'Java', 'C++', 'C#'), width=10,font=('../font/jian.ttf',14)).pack()
# 运行窗口
window.mainloop()
列表框(Lisbox)控件用来向用户显示列表项。所有的列表项都包含相同的字体和颜色。提到列表框(Listbox)控件,就不得不讲一下与它非常相似的复选框(Combobox)控件,后续会讲。
属性 | 描述 |
---|---|
selectmode | 决定选择的模式,tk 提供了四种不同的选择模式,分别是:"single"(单选)、"browse"(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、"multiple"(多选)和 "extended"(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现),默认是 "browse" |
activate(index) | 将给定索引号对应的选项激活,即文本下方画一条下划线 |
bbox(index) | 返回给定索引号对应的选项的边框,返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height), xoffset 和 yoffset 表示距离左上角的偏移位置 |
index(index) | 返回与 index 参数相应选项的序号 |
itemcget(index, option) | 获得 index 参数指定的项目对应的选项(由 option 参数指定) |
itemconfig(index, **options) | 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定) |
import tkinter as tk
# 创建窗口
window = tk.Tk()
# 设置窗口标题和大小
window.title("Listbox")
window.geometry("300x200")
# 创建滚动条
scrollbar = tk.Scrollbar(window)
# 显示滚动条
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
# 创建Listbox控件,关联滚动条
listbox = tk.Listbox(window,selectmode=tk.SINGLE,yscrollcommand=scrollbar.set,height=5)
# 向Listbox中添加元素/也可以通过设定一个元组,使用enumerate()函数来进行遍历
listbox.insert(1, "apple")
listbox.insert(2, "banana")
listbox.insert(3, "orange")
listbox.insert(4, "grape")
listbox.insert(5, "pear")
listbox.insert(6, "watermelon")
# 显示Listbox控件
listbox.pack()
# 主循环
window.mainloop()
复选框/下拉菜单(Combobox)控件和Spinbox控件及其相似,不过需要注意的是,复选框(Combobox)控件并不在tkinter库中,而是在tkinter.ttk子模块中。下面通过一个示例来看下它们的区别。
import tkinter as tk
from tkinter import ttk
# 创建窗口
window = tk.Tk()
# 设置窗口标题和大小
window.title("Combobox")
window.geometry("300x200")
# 创建Combobox控件
combobox = ttk.Combobox(window, values=["Apple", "Banana", "Orange", "Pear"])
# 显示Combobox控件
combobox.pack()
# 主循环
window.mainloop()
你日渐平庸,甘于平庸,将继续平庸!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。