Python:GUI库tkinter(一)
学习自:
1、几个常用的Python GUI库
tkinter:Python的标准Tk GUI工具包的接口。
wxPython:一款开源软件,是Python语言的一套优秀的GUI图形库。
Jython:Jython程序可以和Java无缝集成
2、创建一个GUI程序的步骤
①导入Tkinter模块:import tkinter
②创建控件
③指定这个控件的master,即这个控件属于哪一个
④告诉GM(geometry manager)有一个控件产生了
3、tkinter组件
控件 | 描述 |
Button | 按钮; |
Canvas | 画布;可以在其上显示线条、图片 |
Checkbutton | 多选框; |
Entry | 输入框; |
Frame | 框架;在屏幕上显示一个矩形区域,可以用作容器 |
Label | 标签;可以显示文本和位图 |
Listbox | 列表框; |
Menubutton | 菜单按钮; |
Menu | 菜单;显示菜单栏,下拉菜单和弹出菜单 |
Message | 消息;用来显示多行文本,与Label比较类似 |
Radiobutton | 单选按钮; |
Scale | 范围控件;显示一个数值刻度,为输出限定范围内的数字区间 |
Scrollbar | 滚动条;当内容超过可视化区域时使用,比如列表框 |
Text | 文本控件;用于显示多行文本 |
Toplevel | 容器;用来提供一个单独的对话框,与Frame比较类似 |
Spinbox | 输入控件;与Entry类似,但是可以指定输入的范围值 |
PanedWindow | 窗口布局管理的插件,可以包含一个或者多个子控件 |
LabelFrame | 容器控件。常用于复杂的窗口布局 |
tkMessageBox | 应用程序的消息框 |
补充:GUI消息库tkMessageBox在Python3.4以后变为了tkinter.messagebox
4、标准属性
标准属性也就是所有的控件的共同属性,比如大小、字体和颜色等等
属性 | 描述 |
Dimension | 控件大小; |
Color | 控件颜色; |
Font | 控件字体; |
Anchor | 锚点; |
Relief | 控件样式; |
Bitmap | 位图; |
Cursor | 光标; |
5、几何管理
Tkinter控件有特点的几何状态管理方法,管理整个控件区域组织。
几何方法 | 描述 |
pack() | 包装; |
grid() | 网格; |
place() | 位置; |
6、Button:按钮
Tkinter按钮用于在Python应用程序中添加按钮,按钮上可以放文本或者图像,按钮可用于监听用户行为,能够与一个Python函数关联,当按钮被按下时,自动调用该函数。
语法
w = Button( master , option=value , ... )
参数
master:按钮的父容器;
options:可选项,即该按钮可以设置的属性(见4)。这些选项可以用 key = value 的形式进行设置。
可选项
可选项 | 描述 |
activebackground | 当鼠标放上去时,按钮的背景色 |
activeforeground | 当鼠标放上去时,按钮的前景色 |
bd | 按钮边框的大小,默认为2pixel |
bg | 按钮的背景色 |
command | 按钮关联的函数,当按钮被点击时,执行该函数 |
fg | 按钮的前景色(按钮文本的颜色) |
font | 文本字体 |
height | 按钮的高度 |
highlightcolor | 要高亮的颜色 |
image | 按钮上要显示的图片 |
justify | 显示多行文本的时候,设置不同行之间的对齐方式,可选的方式包括LEFT、RIGHT、CENTER |
padx | 按钮在x轴方向上的内边距 |
pady | 按钮在y轴方向上的内边距 |
relief |
边框样式,设置控件的3D效果,可选项有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 默认为FLAT |
state | 设置按钮组件的状态,可选数值有NORMAL、ACTIVE、DISABLED。默认为NORMAL |
underline | 下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为0时,第一个字符带下划线,为1时,前两个字符带下划线,以此类推 |
width | 按钮的宽度,如果没有设置该项,则其大小将自适应按钮的内容 |
wraplength | 限制按钮每行显示的字符的数量 |
text | 按钮的文本内容 |
anchor | 锚,控制文本的位置,默认为中心 |
方法
方法 | 描述 |
deselect() | 清除单选按钮的状态 |
flash() | 在激活状态颜色和正常颜色之间闪烁几次单选按钮,但保持它开始时的状态 |
select() | 设置单选按钮为选中 |
例子
import tkinter import tkinter.messagebox top=tkinter.Tk() def helloCallBack(): tkinter.messagebox.showinfo('Hello Python','Hello Runoob') b=tkinter.Button(top,text='点我',command=helloCallBack) b.pack() top.mainloop()
7、Canvas:画布
画布Canvas是用来绘图的,可绘制内容非常多:各种几何形状(直线、矩形、圆……)、图片、位图、文字、UI组件(如Button)。
学习总结自:Python tkinter Canvas画布完全攻略-Python
构造
w = Canvas ( master , option = value , ... )
参数
参数 |
描述 |
bd | 边框宽度,默认2pixel |
bg | 背景色 |
confine | 如果为True(默认),则画布不能滚动到可以滑动的区域外 |
cursor | 光标的形状,如arrow、circle、cross、plus等 |
height | 高度 |
highlightcolor | 高亮颜色 |
relief | 边框样式,可选值FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 默认为 FLAT。 |
scrollregion | 一个Tuple(w,n,e,s),定义了画布可以滚动的最大区域,分别为左上右下 |
width | 宽度 |
xscrollincrement | 水平滚动的数量值 |
xscrollcommand | 水平滚动条 |
yscrollincrement | 垂直滚动的数量条 |
yscrollcommand | 垂直滚动套 |
方法:canvas.create_xxx
xxx可以是以下几项
xxx |
说明 |
arc | 扇形 |
bitmap | 位图 |
image | 图像 |
line | 线条 |
oval | 椭圆 |
polygon | 多边形 |
rectangle | 矩形 |
text | 文字 |
window | 组件 |
Canvas绘图时,(0,0)位于Canvas左上角。
绘制line、rectangle、oval时,均需要指出两个点的坐标,例如create_xxx(x1,y1,x2,y2),对于line,(x1,y1)是起点,(x2,y2)是终点;对于rectangle,分别是左上和右下点的坐标;对于oval,是圆的外接矩形的左上和右下角点的坐标。
绘制arc时,同样是指定左上和右下两点坐标。可以通过参数start改变起始角度,也可以通过extent改变转过的角度。
绘制polygon时,需要指定多边形所有点的坐标。
绘制bitmap、image、text、window时,只要一个坐标点的位置即可,用于指定目标的放置位置。
绘制这些元素时的参数
参数 | 说明 |
fill | 填充颜色。默认不填充 |
outline | 边框颜色。 |
width | 宽度。默认1pixel |
dash | 边框采用虚线。该属性值可以为单独的整数,指定每根虚线的长度;也可以形如(5,2,3)形式——5:线段长度;2:间隔长度;3:虚线长度; |
stipple | 使用位图平铺进行填充。该选项可以和fill选项结合使用,fill选项用于指定位图的颜色 |
style | 弧的样式,仅对arc有效。PIESLICE(扇形)、CHORD(弓形)、ARC(仅绘制弧)选项值 |
start | 弧的起始角度,仅对arc有效。 |
extent | 弧的角度,仅对arc有效 |
arrow | 绘制line时,两端是否有箭头。NONE(两端无箭头)、FIRST(开始端有箭头)、LAST(结束端有箭头)、BOTH(两端都有箭头) |
arrowshape | 指定箭头形状。该选项是一个形如 "20 20 10" 的字符串,字符串中的三个整数依次指定填充长度、箭头长度、箭头宽度。 |
joinstyle | 连接点的形状,仅对line和polygon有效。 METTER、ROUND、BEVEL |
anchor | 元素放置位置,仅对text、window有效 |
justify | 文字的对齐方式,仅对text有效。CENTER、LEFT、RIGHT |
实例
import tkinter import tkinter.messagebox #创建一个矩形,指定画布的颜色为白色 root = tkinter.Tk() #传建一个Canvas,设置其背景色为白色 cv = tkinter.Canvas(root , bg='white') #创建一个矩形,左上和右下坐标分别为(10,10)和(110,110) cv.create_rectangle(10,10,110,110) cv.pack() root.mainloop()
补充
由于我们总是先创建一个Canvas,再在其中生成一个具体的要素,所以为确定方位,我们可以给这个Canvas涂上背景色,来更好地确认这些要素放置的位置:
cv = tkinter.Canvas(root , bg='white')
在用create_image往canvas中添加图像时,通常写法是这样:
canvas.create_image(x,y,anchor,image) #例子 canvas.create_image((0,0),anchor='n',image=image)
anchor有(n,s,w,e,ne,nw,sw,se,center)九种位置,它指明了我们的image的位置是以什么为基准的,举个例子:
n就代表以上边界中点为基准点,前边的x,y都是指这个基准点,即上边界中点的位置;
以此类推,ne就代表以右上角顶点为基准点;
center代表以图像中心点为基准点……
这样我们再来看 canvas.create_image(x,y,anchor,image),这句话的意思就明了了——把image的anchor点,放在canvas的(x,y)处,得到最终的image与canvas的相对位置。
8、Checkbutton:复选框
复选框用于选取我们需要的选项,每一项之前有个选项框,选中则会有√,再次点击则取消选中
语法
w = Checkbutton ( master , option = value , ... )
参数
参数同上
可选项
可选项 |
说明 |
activebackground | 鼠标放上去时,按钮的背景色 |
activeforeground | 鼠标放上去时,按钮的前景色(文字颜色) |
bg | 按钮的背景色 |
bitmap | 位图 |
bd | 边框的大小,默认为2pixel |
command | 关联函数,按钮被点击时,执行该函数 |
cursor | 光标形状 |
disableforeground | 禁用项的前景色 |
font | 文本字体 |
fg | 选项的前景色 |
height | 复选框文本行数,默认为1 |
highlightcolor | 聚焦的高亮颜色 |
image | 是否使用图标 |
justify | 显示多行文本的时候,设置不同行之间的对齐方式 |
offvalue | Checkbutton的值不仅仅是1或0,可以是其他类型的数值,可以通过onvalue和offvalue的属性设置Checkbutton的状态值 |
onvalue | |
padx | x轴上的内边距,默认1pixel |
pady | y轴上的内边距 |
relief | 边框样式 |
selectcolor | 选中后的颜色,默认为'red' |
selectimage | 选中后的图片 |
state | 状态 |
text | 显示的文本,用'\n'对文本进行换行 |
underline | 下划线 |
variable | 变量,1或0,代表选中或者选不中 |
width | 宽度 |
wraplength | 是否设置包裹 |
方法
deselect、flash、invoke、select、toggle
实例
from tkinter import * import tkinter top = tkinter.Tk() CheckVar1 = IntVar() CheckVar2 = IntVar() C1 = Checkbutton( top, text='RUNOOB', variable=CheckVar1, onvalue=1,offvalue=0,height=5,width=20 ) C2 = Checkbutton( top,text='GOOGLE',variable=CheckVar2, onvalue=1,offvalue=0,height=5,width=20 ) C1.pack() C2.pack() top.mainloop()
9、文本框:Entry
允许用户输入一行文本字符串。如果需要输入多行文本,可以使用Text组件;如果需要显式一行或者多行文本并且不允许修改,可以使用Label组件
语法、可选项
同前
补充的可选项
补充的可选项 | 说明 |
exportselection | 默认情况下,如果在输入框中选中文本,会默认复制到粘贴板。取消这个功能可以通过设置值为0实现 |
show | 指定文本框内容显示为字符。比如密码可以值设置为show='.' |
textvariable | 文本框的值,是一个StringVar()对象 |
方法
方法 | 描述 |
delete(first , last=None) |
删除文本框中指定位置处的值 text.delete(10) #删除索引10处的值 text.delete(10,20) #删除索引值从10到20之间的值 text.delete(0,END)#删除所有值 |
get() | 获取文本框的值 |
icursor(index) | 将光标移动到指定索引位置,只有当文本框获取焦点后成立 |
index(index) | 指定索引处的值 |
insert(index , s) | 向索引index处插入值s |
select_adjust( index ) | 选中指定索引和光标所在位置之间的值 |
selete_clear() | 清空文本框 |
select_from( index ) | 设置光标的索引 |
select_parent() | 如果选中了,返回True,否则False |
select_range( start , end ) | 选中指定索引位置的值 |
select_to( index ) | 选中指定索引与光标之间的值 |
实例
from tkinter import * import tkinter top=tkinter.Tk() L1=Label( top , text='网站名') L1.pack( side = LEFT) E1= Entry( top , bd =5) E1.pack(side = RIGHT) top.mainloop()
10、框架:Frame
框架控件在屏幕上显示一个矩形区域,多用来作为容器
补充的可选项
takefocus : 指定该组件是否接受输出焦点(用户可以通过tab键将焦点转移上来),默认为false
实例
from tkinter import * import tkinter def say_hi(): print('Hello ~!') top=tkinter.Tk() frame1=Frame(top) frame2=Frame(top) top.title('tkinter frame') label=Label(frame1 , text='Label' , justify=LEFT) label.pack(side=LEFT) hi_there =Button(frame2 , text ='Say hi~' , command=say_hi) hi_there.pack() frame1.pack(padx=1 , pady=1) frame2.pack(padx=10,pady=10) top.mainloop()
11、标签:Label
Label:在指定的窗口中显示文本和图像(区别于Entry和Text,该控件中的文本不允许用户修改)
补充的可选项
anchor | 文本或图像在背景内容区的位置,默认为center,可选值为(n,s,w,e,ne,nw,sw,se,center) |
textvariable | StringVar,显示标签文本。修改该项会使标签文本自动更新 |
实例
from tkinter import * import tkinter top=Tk() w=Label(top , text = 'Hello RUNOOB!') w.pack() top.mainloop()
12、总结
xxx控件用法的程序大纲
from tkinter import * import tkinter #1、创建一个控件的父容器Tk对象 top=Tk() #2、实例化控件 w=xxx( top , options=value , ...) #3、部署控件到窗口中 w.pack( ... ) #部署 #4、主窗口显示 top.mainloop()
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性