前言
如果有些参数不理解,可以先看看第一篇Tkinter 1. 基本介绍
目录:
- Button 按钮
- Checkbutton 多选按钮
- Radiobutton 单选按钮
- Entry 输入框
- Spinbox 限制范围的输入框
- Text 文本框
- Label 标签
- Listbox 列表框
- Combobox 下来列表框(ttk)
- Frame 框架
- Labelframe 可以添加标签的框架
- Panedwindow 窗格窗口,就是把窗口分区
- Separator 分割线(ttk)
- Notebook 标签页(ttk)
- Scale 滑块
- Scrollbar 滚动条
- Progressbar 进度条(ttk)
- Menu 菜单
- sizegrip 窗口大小拖动块(ttk)
- Treeview 树状结构查看器(ttk)
- Canvas 画布
Button 按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
repeatdelay | 重复延迟 |
repeatinterval | 重复间隔 |
command | 添加调用多函数,当点击按钮调用该函数 |
default | 指定按钮默认的状态:normal , active , or disabled . |
overrelief | 跟relief的设置一样,只不过这个是当鼠标移到按钮上才显示样式 |
实例
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('test app')
mystr = tk.StringVar()
tk.Label(root,
textvariable=mystr,
width=20,
height=3,
bg='#e33e31').pack()
tag = False
def show():
global tag
if tag == False:
mystr.set('you click!')
tag = True
else:
mystr.set('')
tag = False
btn = tk.Button(root,
bd=15,
text='Click',
width=10,
font=('"Microsoft Yahei',20,'bold'),
relief='sunken',
bg='#575757',
fg='white',
command=show).pack()
root.mainloop()
Checkbutton 多选按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
indicatoron | 选择方法:如果是True就是☑️的选择方法,如果是False,就是按钮的选择方法,而且relief是:sunken |
onvalue / offvalue | 勾选选项 和取消勾选时输出的值 |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
frm = tk.LabelFrame(root,
text='喜欢的编程语言',
padx=10,
pady=10)
frm.pack()
var_p = tk.IntVar()
var_j = tk.IntVar()
def check():
if (var_p.get() == 1) & ( var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我喜欢python,也喜欢Java')
elif (var_p.get() == 1) & (var_j.get() == 0) :
tkinter.messagebox.showinfo(message='我只喜欢python')
elif (var_p.get() == 0) & (var_j.get() == 1) :
tkinter.messagebox.showinfo(message='我只喜欢Java')
else:
tkinter.messagebox.showinfo(message='我两个都不喜欢')
btn1 = tk.Checkbutton(frm,text='Python',variable=var_p,onvalue=1,offvalue=0,command=check)
btn2 = tk.Checkbutton(frm,text='Java',variable=var_j,onvalue=1,offvalue=0,command=check)
btn1.grid(row=0,column=0)
btn2.grid(row=0,column=1)
root.mainloop()
Radiobutton 单选按钮
参数
之前未提参数说明
参数 | 说明 |
---|---|
indicatoron | 选择方法:如果是True就是☑️的选择方法,如果是False,就是按钮的选择方法,而且relief是:sunken |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
frm = tk.LabelFrame(root,
text='性别',
padx=10,
pady=10)
frm.pack()
var_r = tk.IntVar()
def radio():
if var_r.get() == 1:
tkinter.messagebox.showinfo(message='你是男的')
else:
tkinter.messagebox.showinfo(message="你是女的")
rdo = tk.Radiobutton(frm,text='男',variable=var_r,value=1,command=radio)
rdo2 = tk.Radiobutton(frm,text='女',variable=var_r,value=0,command=radio)
rdo.grid(row=0,column=0)
rdo2.grid(row=1,column=0)
root.mainloop()
Entry 输入框
参数
之前未提参数说明
参数 | 说明 |
---|---|
validate | 发生某些动作 |
validatecommand or vcmd | 发生某些动作时,触发该函数 |
show | 适用于输入密码的输入框,当show="*"时,输入密码的时候,不会显示实际内容,只显示* |
validate
当输入框获得焦点或者失去焦点等,触发
validatecommand
上的函数,下面的英语特别简单就不翻了。
输入框中输入内容的索引
- 直接用数字表示,0表示第一个字符、1表示第二个字符,以此类推
- ‘end’ 表示输入内容的最后一个字符
- ‘insert’ 指示与插入光标相邻并紧随其后的字符
常用的函数
- delete(first, last) 从first删到last (删除内容)
- insert(index, string) 在索引指示的字符之前插入字符串的字符 (添加内容)
- get() 获取输入框的内容 (获取内容)
实例
import tkinter as tk
import tkinter.messagebox
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('600x400')
self.set_widget()
self.bind_event()
self.mainloop()
def set_widget(self):
self.frm = tk.Frame(self,pady=40)
self.frm.pack()
tk.Label(self.frm,text='账号').grid(row=0,column=0,pady=10,padx=10)
tk.Label(self.frm,text='密码').grid(row=1,column=0,pady=10)
self.name = tk.StringVar()
self.name.set('请输入邮箱或者手机号')
self.ety_name = tk.Entry(self.frm,
width=25,
textvariable=self.name,
font=("Microsoft Yahei",8,'italic'),
fg='gray')
self.ety_name.grid(row=0,column=1,columnspan=3)
self.ety_pwd = tk.Entry(self.frm,
show='*',
width=25,
font=("Microsoft Yahei",8))
self.ety_pwd.grid(row=1,column=1,columnspan=3)
self.btn_write = tk.Button(self.frm,text='写入',width=5,command=self.write)
self.btn_write.grid(row=2,column=3)
self.btn_clear = tk.Button(self.frm,text='删除',width=5,command=self.clear)
self.btn_clear.grid(row=2,column=1)
self.mystr = tk.StringVar()
self.ety_show = tk.Entry(self,textvariable=self.mystr,bg='red')
self.ety_show.pack()
def bind_event(self):
""" 绑定事件"""
self.ety_name.bind('<FocusIn>',self.clear_tip)
self.ety_name.bind('<FocusOut>',self.add_tip)
def clear_tip(self,event):
self.name.set('')
self.ety_name.config(font=("Microsoft Yahei",8),fg='black')
def add_tip(self,event):
if self.ety_name.get() == '' :
self.name.set('请输入邮箱或者手机号')
self.ety_name.config(font=("Microsoft Yahei",8,'italic'),fg='gray')
tkinter.messagebox.showerror(title='警告',message='账号不能为空!')
def write(self):
data = self.ety_name.get()
self.ety_show.delete(0,'end') # 先清空避免里面有数据
self.ety_show.insert('end',data)
def clear(self):
self.ety_show.delete(0,'end') # 从第一个字符删到最后一个字符
App()
Spinbox 限制范围的输入框
Spinbox 是用来选择一个数值范围内的数字的输入组件
参数
之前未提参数说明
属性 | 说明 |
---|---|
from_ | 设置数值范围的最小值 |
to | 设置数值范围的最大值 |
command | 当点击了Spinbox的滑块时触发函数,手动输入值不会触发 |
format | 设置数字格式,比如'%.2f' 代表小数点后保留两位小数 |
values | 用from to 只能设置数值,用这个方法就可以选择字符串,如:values=(‘nan’,‘nv’) |
validate\validatecommand | 同上 |
实例
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
def show():
data = sbox.get()
tkinter.messagebox.showinfo(message=f'you select {
data}')
sbox = tk.Spinbox(root,bg='red',from_=0,to=10,command=show,format='%.2f',justify='center')
sbox.pack()
root.mainloop()
Text 文本框
参数
之前未提参数说明
属性 | 说明 |
---|---|
setgrid | 确定此小部件是否控制其顶级窗口的调整大小网格 |
spacing1 | 在一段没有手动换行的段落前设置行距(当写的内容超过文本框边界而换行的没问题) |
spacing2 | 在一段没有手动换行的段落之间的每一行设置行距 |
spacing3 | 在一段没有手动换行的段落后设置行距 |
tabs | tab键的距离 |
undo | 是否有撤销功能,默认True,有撤销功能 |
autoseparators | 是否在撤消堆栈中自动插入分隔符 |
Text控件中关于index索引
索引 | 说明 |
---|---|
‘insert’ | 光标所在的位置 |
‘current’ | 与鼠标最近的位置 |
‘end’ | 文本区域最后一个字符的下一个位置 |
‘line.char’ | 某一行的某一个字符,行从1开始,字符从0开始,比如‘1.0’表示第一行的第一个字符 |
“line.end” | 表示某一行到末尾的最后一个位置 |
tag.first tag.last | 标签tag的第一个字符,和最后一个字符 |
mark | 表示紧跟在名称为mark 的标记之后的字符 |
当有选中文本时,还可以使用以下这种索引:
Text对象的get()方法可以取得目前所选的文字,在使用Text文字区域时,如果有选取文字操作发生时,Text的对象会将所选文字的起始索引放在SEL_FIRST,结束索引放在SEL_LAST,将SEL_FIRST和
SEL_LAST当做get方法的参数,就可以获得目前所选的文字了
函数
函数 | 功能说明 |
---|---|
bbox(index) | 返回值是一个 4 元组:(x, y, width, height) |
compare(index1, op, index2) | 返回对比 index1 和 index2 指定的两个字符的结果,op—’<’, ‘<=’, ‘==’, ‘>=’, ‘>’ 或 ‘!=’ |
delete(index1, index2=None) | 删除给定范围的文本或嵌入对象 |
dlineinfo(index) | 返回给定索引指定的字符所在行的边界框,返回值是一个 5 元组:(x, y, width, height, offset),offset 表示从该行的顶端到基线的偏移 |
dump(index1, index2=None, command=None, **kw) | 返回 index1 和 index2 之间的内容 返回的值是一个由 3 元组(关键词,值,索引)组成的列表,关键词参数的顺序为:all, image, mark, tag, text, window ,如果需要筛选个别关键词,可以用 dump(index1, index2, image=True, text=True) 这样的形式调用;如果指定了 command 函数,那么会为列表中的每一个三元组作为参数调用一次该函数(这种情况下,dump() 不返回值 |
edit_modified(arg=None) | 查询和设置 modified 标志 |
edit_redo() | 恢复”上一次的“撤销”操作 |
edit_reset() | 清空存放操作记录的栈 |
edit_separator() | 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作 |
edit_undo() | 撤销最近一次操作 |
get(index1, index2=None) | 返回 index1 到 index2(不包含)之间的文本 |
index(index) | 将 index 参数指定的位置以 “line.column” 的索引形式返回 |
insert(index, chars, *args) | 在 index 参数指定的位置插入字符串,参数 tags 用于指定文本的样式 |
peer_create(self, newPathName, cnf={}, **kw) | 用给定的newPathName创建一个同级的文本工具和任何可选的标准配置选项,默认统计文本工具和它的父级工具一样有着相同的起始线和终止线。但是这些可以被标准配置参数重写 |
peer_names() | 返回这个工具的同级工具的列表,不包括这个工具本身 |
replace(index1, index2, chars, *args) | 将 index1 到 index2 之间的内容替换为 chars 参数指定的字符串,如果需要为替换的内容添加 Tag,可以在 args 参数指定 Tag |
search(pattern, index, stopindex=None,forwards=None, backwards=None, exact=None,regexp=None, nocase=None, count=None, elide=None) | 太长写在下面 |
see(index) | 滚动内容,确保 index 指定的位置可见 |
search
- 从 index 开始搜索 pattern,到 stopindex 结束(不指定表示搜索到末尾)
- 如果成功找到,以 “line.column” 返回第一个匹配的字符;否则返回空字符串
- forwards 参数设置为 True 表示向前(->)搜索
- backwards 参数设置为 True 表示向后(<-)搜索
- exact 参数设置为 True 表示搜索与 pattern 完全匹配的结果
- regexp 参数设置为 True,则 pattern 被解释为 Tcl 格式的正则表达式
- nocase 参数设置为 True 是忽略大小写,默认是区分大小写的搜索
- count 参数指定为一个 IntVar 的 Tkinter 变量,用于存放当找到匹配的字符个数(如果匹配结果中没有嵌入的 image 或 window 对象的话,一般该值等于 pattern 的字符个数)
Tags
1. Tags可以设置的属性
- background color——背景色
- bgstipple bitmap——背景位图
- borderwidth pixels——边框宽度
- elide boolean——指定是否应该删除数据。已删除的数据(字符、图像、嵌入的窗口等)不显示并且在屏幕上不占用空间,但进一步的行为与普通数据一样
- fgstipple bitmap——前景位图
- font fontName——字体
- foreground color——前景色
- justify justify——对齐方式 left, right, or center.
- lmargin1 pixels——第一行左边边距
- lmargin2 pixels——当一行内容过多而换行,换行的那些行的左边边距
- lmargincolor color
- offset pixels——指定文本基线应垂直偏移整行基线的量
- overstrike boolean——删除线
- overstrikefg color——删除线颜色
- relief relief
- rmargin pixels——右边距
- rmargincolor color——右边距颜色
- selectbackground color
- selectforeground color
- spacing1 pixels
- spacing2 pixels
- spacing3 pixels
- tabs tabList
- tabstyle style
- underline boolean——是否设置下划线
- underlinefg color——指定显示下划线时使用的颜色
- wrap mode —— none, char, or word
2. Tags方面的函数
tag_add(tagName, index1, index2…)
- 为 index1 到 index2 之间的内容添加一个 Tag(tagName 参数指定)
- 如果 index2 参数忽略,则单独为 index1 指定的内容添加 Tag
tag_bind(tagName, sequence, func, add=None)
- 给tag绑定事件(sequence)
- 如 Enter, Leave, ButtonPress, Motion, and KeyPress 等事件
import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.geometry('600x400')
tx = tk.Text(root)
tx.pack()
tx.tag_config('tg1',background='red',foreground='white',underline=True)
tx.insert('end','xxxxxxxxxx','tg1')
def show(event):
tkinter.messagebox.showinfo(message='hello')
tx.tag_bind('tg1','<Enter>',show)
root.mainloop()
tag_unbind(tagName, sequence, funcid=None)
- 解绑
tag_cget(tagName, option)
- 返回 tagName 指定的 option 选项的值
tag_config( tagName, cnf=None, **kw)
- 配置一些属性:背景颜色,前景色,字体等等,可设置的属性在上面有提到
- 和tag_configur