Tkinter 2. 控件(非常齐全、详细)

这篇博客详细介绍了Tkinter库中的多种控件,包括Button、Checkbutton、Radiobutton、Entry、Spinbox、Text、Label、Listbox、ttk_combobox、Frame、Labelframe、Panedwindow、ttk_separator、ttk_notebook、Scale、Scrollbar、ttk_progressbar、Menu、OptionMenu、ttk_sizegrip、ttk_treeview和Canvas。每个控件的参数、用法和实例都有详尽说明,是学习Tkinter GUI编程的宝贵资源。
摘要由CSDN通过智能技术生成

前言

如果有些参数不理解,可以先看看第一篇Tkinter 1. 基本介绍


目录:

  1. Button 按钮
  2. Checkbutton 多选按钮
  3. Radiobutton 单选按钮
  4. Entry 输入框
  5. Spinbox 限制范围的输入框
  6. Text 文本框
  7. Label 标签
  8. Listbox 列表框
  9. Combobox 下来列表框(ttk)
  10. Frame 框架
  11. Labelframe 可以添加标签的框架
  12. Panedwindow 窗格窗口,就是把窗口分区
  13. Separator 分割线(ttk)
  14. Notebook 标签页(ttk)
  15. Scale 滑块
  16. Scrollbar 滚动条
  17. Progressbar 进度条(ttk)
  18. Menu 菜单
  19. sizegrip 窗口大小拖动块(ttk)
  20. Treeview 树状结构查看器(ttk)
  21. 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上的函数,下面的英语特别简单就不翻了。

输入框中输入内容的索引
  1. 直接用数字表示,0表示第一个字符、1表示第二个字符,以此类推
  2. ‘end’ 表示输入内容的最后一个字符
  3. ‘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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JunChen681

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值