最近用tkinter+pyinstaller+python完成了一个小工具的项目,在过程当中对tkinter做了一定的了解,以此作为记录,方便日后进行查阅,也希望对各位论坛朋友有帮助。
一、tkinter简介
tkinter是python实现gui图形界面的一个库,同时还有wxpython以及qt(本人技术还有待提高,目前就只会点tkinter,哈哈)。在我个人使用tkinter来写gui工具之后,我觉得tkinter还是蛮好理解的。
tkinter包含了几种常用类型的控件,包括Label(标签,就是界面上显示的字)、Entry(输入框)、Button(按钮,可以绑定各种封装函数)、Radiobutton(单选框)、Checkbuttion(复选框)、messagebox(消息弹出框)、Text(文本编辑框)、Listbox(列表控件)、Scrollbar(滚条控件)等。下面会进行一些属性参数的总结。
二、tkinter各类控件参数总结
1、title:设置窗口的标题
属性 | 属性简析 | 实例 |
title | 设置窗口标题 | title(‘xxxxx’) |
geometry | 设置窗口大小,中间不能是*,而是x | geometry('200x100') |
resizable | 设置窗口是否可以变化高(height)、 宽(width),True为可以变化,False为不可变化 | resizable(width=False, height=True) |
2、Label:标签
属性 | 属性简析 | 实例 |
text | 需要在界面显示的Label标签内容 | Label(root,text=‘xxxxx’) |
height | 组件的高度(所占行数) | Label(root,text=‘xxxxx’,height=2) |
width | 组件的宽度(所占字符个数) | Label(root,text=‘xxxxx’,height=2,width=20) |
fg | 前景字体颜色 | Label(root,text=‘xxxxx’,fg='blue')---显示字体为蓝色 |
bg | 背景颜色 | Label(root,text=‘xxxxx’,bg=‘red’)---显示背景为红色 |
justify | 多行文本的对齐方式,可选参数为: LEFT、 CENTER、RIGHT,分别是向左、居中、向右对齐 | Label(root,text=‘xxxxx’,justify=tk.LEFT) |
padx | 文本左右两侧的空格数(默认为1) | Label(root,text=‘xxxxx’,padx=5) |
pady | 文本上下两侧的空格数(默认为1) | Label(root,text=‘xxxxx’,pady=5) |
font | 设置字体格式和大小 | Label(root,text=‘xxxxx’,font=("微软雅黑", 12)) |
photo | 设置背景图片,事先需要指定图片路径 | photo=tk.PhotoImage(file='指定图片路径') Label(root,text=‘xxxxx’,image=photo) |
compound | 图像背景图位置,可选参数为:botton、top、right、left、center(下、上、右、左、文字覆盖图像) |
photo=tk.PhotoImage(file='指定图片路径') Label(root,text=‘xxxxx’,image=photo,compound=center) |
3、Button:按钮
属性 | 属性简析 | 实例 |
text | 按钮图标显示内容 | Button(root,text='xxxx') |
height | 组件的高度(所占行数) | Button(root,text='xxxx',height=2) |
width | 组件的宽度(所占字符个数) | Button(root,text='xxxx',width=20) |
fg | 前景字体颜色 | Button(text='xxxx',fg='blue')---显示按钮字体颜色为蓝色 |
bg | 背景颜色 | Button(root,text='xxxx',bg='red')---显示按钮背景为红色 |
activebackground | 按钮按下时的背景颜色 | Button(root,text='xxxx',activebackground='grey') |
activeforeground | 按钮按下时的前景字体颜色 | Button(root,text='xxxx',activeforeground='white') |
justify | 多行文本的对齐方式,可选参数为: LEFT、 CENTER、RIGHT,分别是向左、居中、向右对齐 | Button(root,text=‘xxxxx’,justify=tk.LEFT) |
padx | 文本左右两侧的空格数(默认为1) | Button(root,text='xxxx',padx=10) |
pady | 文本上下两侧的空格数(默认为1) | Button(root,text='xxxx',pady=10) |
command | 按钮触发执行的命令(函数) | Button(root,text='xxxx',command=函数) |
4、Entry:输入框
属性 | 属性简析 | 实例 |
width | 组件的宽度(所占字符个数) | Entry(root,width=20) |
fg | 前景字体颜色 | Entry(root,fg='blue') |
bg | 背景颜色 | Entry(root,bg='blue') |
show | 将Entry框中的文本替换为指定字符,用于输入密码等,如设置 show="*" | Entry(root,show="*") |
state | 设置组件状态,默认为normal,可设置为:disabled—禁用组件,readonly—只读 | Entry(root,state=readonly) |
textvariable | 指定变量,需要事先定义一个变量,在Entry进行绑定获取变量的值 | text=tk.StringVar() Entry(root,textvariable=text) |
属性 | 属性简析 | 实例 |
text | 单选框文本显示内容 | Radiobutton(root,text='xxxx') |
variable | 单选框索引变量,通过变量的值确定哪个单选框被选中。一组单选框使用同一个索引变量,需要事先设定一个变量 | color=tk.StringVar() Radiobutton(root,variable=color) |
value | 单选框选中时设定变量的值 | color=tk.StringVar() Radiobutton(root,variable=color,value='red') |
command | 单选框选中时执行的命令(函数) | color=tk.StringVar() Radiobutton(root,variable=color,value='red',command=函数) |
属性 | 属性简析 | 实例 |
text | 复选框显示的文本 | Checkbutton(root,text='xxxx') |
variable | 复选框索引变量,通过变量的值确定哪些复选框被选中。每个复选框使用不同的变量,使复选框之间相互独立,事先需要定义不同的变量 | typeBlod=tk.IntVar() Checkbutton(root,variable=typeBlod) |
onvalue | 复选框选中(有效)时变量的值,可以通过计算值来判断分支不同的效果,计算值由自己设定 | typeBlod=tk.IntVar() Checkbutton(root,variable=typeBlod,onvalue=1) |
offvalue | 复选框未选中(无效)时变量的值,可以通过计算值来判断分支不同的效果,一般设置为0 | typeBlod=tk.IntVar() Checkbutton(root,variable=typeBlod,onvalue=1,offvalue=0) |
command | 复选框选中时执行的命令(函数) | typeBlod=tk.IntVar() Checkbutton(root,variable=typeBlod,onvalue=1,offvalue=0,command=函数) |
属性 | 属性简析 | 实例 | 备注 |
t.insert(mark, 内容) | 插入文本信息,mark可以是行号,或者特殊标识 | t=tk.Text() t.insert(END,'插入的文本信息') | INSERT:光标的插入点 CURRENT:鼠标的当前位置所对应的字符位置 END:这个Textbuffer的最后一个字符 SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常 SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发异常 |
t.delete(mark1, mark2) | 删除文本信息 | | INSERT:光标的插入点CURRENT:鼠标的当前位置所对应的字符位置 END:这个Textbuffer的最后一个字符 SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常 SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发异常 |
用法
8.1、创建:lb = ListBox(根对象, [属性列表])
8.2、绑定变量 var=StringVar()
8.3、lb=ListBox(根对象, listvariable = var)
8.4、得到列表中的所有值 var.get()
8.5、设置列表中的所有值 var.set((item1, item2, .....))
8.6、添加:lb.insert(item)
8.7、删除:lb.delete(item,...)
8.8、绑定事件 lb.bind('<ButtonRelease-1>', 函数)
8.9、获得所选中的选项 lbl.get(lb.curselection())
9、Scrollbar:滚条
后续更新
三、tkinter构建gui框架参数
1、frame:
内嵌框架,可以在一个图形界面中设定多个frame框架,也可以在frame再次嵌套frame
frame=tk.Frame(父类框架)
frame.pack()
2、pack
属性 | 属性简析 | 备注 | 其他 |
fill | 设置组件是否向水平或垂直方向填充,包含X、Y、BOTH、NONE | fill = X(水平方向填充) fill = Y(垂直方向填充) fill = BOTH(水平和垂直) NONE 不填充 | |
expand | 设置组件是否展开,当值为YES时,side选项无效。组件显示在父容器中心位置;若fill选项为BOTH,则填充父组件的剩余空间。它表示某个控件在fill那个方向,要不要把空白的地方分配给它 | YES 、NO(1、0) | 若expand=True或者expand=1,表示在fill那个方向,把空白处都分给这个控件,让它尽量占满。 若expand=False或者expand=0,表示在fill那个方向,有空也不给它。 |
side | 设置组件的对齐方式 | LEFT、TOP、RIGHT、BOTTOM | 值为左、上、右、下 |
ipadx、ipady | 设置x方向(或者y方向)内部间隙(子组件之间的间隔),它表示某个控件的内边距,即控件边缘和这个控件内容(文字图片什么的)的间距 | 可设置数值,默认是0 | 非负整数,单位为像素 |
padx、pady | 设置x方向(或者y方向)外部间隙(与之并列的组件之间的间隔),它表示某个控件的外边距,即控件边缘和这个控件所在容器之间的间距 | 可设置数值,默认是0 | 非负整数,单位为像素 |
anchor | 锚选项,当可用空间大于所需求的尺寸时,决定组件被放置于容器的何处,它表示某个控件在容器里的摆放方式,是左还是右,是上还是下 | N、E、S、W、NW、NE、SW、SE、CENTER(默认值为CENTER) | 表示八个方向以及中心 |
3、grid
属性 | 属性简析 | 实例 |
row和column | 它表示某个控件要放在第几行网格或第几列网格,下标都是从0开始计的 | xxx.grid(column=1,row=1) |
rowspan和columnspan | 它表示某个控件将会竖着跨几行或横着跨几列,默认都是1 | xxx.grid(column=1,row=1,columnspan=2) xxx.grid(column=1,row=1,rowspan=2) |
padx和pady | 它表示某个控件的外边距,即控件边缘和这个控件所在容器之间的间距,单位是像素 | xxx.grid(column=1,row=1,padx=10) xxx.grid(column=1,row=1,pady=10) |
ipadx和ipady | 它表示某个控件的内边距,即控件边缘和这个控件内容(文字图片什么的)的间距,单位是像素 | xxx.grid(column=1,row=1,ipadx=10) xxx.grid(column=1,row=1,ipady=10) |
sticky | 它表示某个控件在网格里的摆放方式,是左还是右,是上还是下,即使窗口被拉大也会按照指定方向对齐 | 若sticky=N,表示North,尽可能往北面/上面停靠。 若sticky=S,表示South,尽可能往南面/下面停靠。 若sticky=W,表示West,尽可能往西边/左边停靠。 若sticky=E,表示East,尽可能往东边/右边停靠。 若sticky=NS,表示NorthSouth,尽可能往南北方向/上下拉伸。 若sticky=EW,表示EastWest,尽可能往东西方向/左右拉伸。 若sticky=CENTER,尽可能往中心停靠。 |
四、消息弹出框messagebox(在这里将messagebox简称为msgbox)
消息弹出框用于info、warning、error提示框的弹出使用的,我们可以根据自己的需求来使用
属性 | 属性简介 | 实例 |
showinfo | info信息提示,弹出提示框 | msgbox.showinfo("INFO","Showinfo test"),INFO是提示框title,Showinfo test是提示框内容 |
showwarning | warning警告信息提示,弹出警告框 | msgbox.showwarning("WARNING","Warning test"),WARNING是警告框title,Warning test是警告框内容 |
showerror | error错误信息提示,弹出错误框 | msgbox.showerror("ERROR","Error test"),ERROR是错误框title,Error test是错误框内容 |
askquestion | 提问窗口提示 | msgbox.askquestion("Question","Askquestion test") |
askokcancel | 确定与取消窗口提示 | msgbox.askokcancel("OkCancel","Askokcancel test") |
askyesno | 确定与取消窗口提示 | msgbox.askretrycancel("Retry","Askretrycancel test") |
askretrycancel | 重试与取消窗口提示 | msgbox.askretrycancel("Retry","Askretrycancel test") |