Tkinter库简介
Tkinter是python的标准GUI库,且是内置在python安装包中的库。
import tkinter
mac = tkinter.Tk() # 初始化Tk()创建Mac窗口对象
mac.title("第一个Tkinter") # 设置窗口标题
mac.geometry("![600x400+0+0](https://img-blog.csdnimg.cn/20200817092121563.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ1MzM4MDY3,size_16,color_FFFFFF,t_70#pic_center)
") # 设置窗口大小 格式为"widthxheight+x+y"
mac.mainloop()
运行结果:
1. pack:
采用块的方式组织组件。
调用子组件方法pack(),则该子组件在其父组件中采取pack布局。
pack函数提供的参数:
option | 解释 | 取值范围 |
---|---|---|
side | 停靠在父组件的哪一边上 | ‘top’(默认值), ‘bottom’, ‘left’, ‘right’ |
fill | 填充空间 | ’x’, ‘y’, ‘both’, ‘none’ |
anchor | 停靠位置,对应于东南西北以及四个角 | ‘n’, ‘s’, ‘e’, ‘w’, ‘nw’, ‘ne’, ‘sw’, ‘se’, ‘center’(默认值) |
expand | 扩展空间 | 0或1 |
ipadx, ipady | 组件内部在x/y方向上填充的空间大小 | 单位为c(厘米),m, i(英寸), p(打印机的点) |
padx, pady | 组件外部在x/y方向上填充空间的大小 | 单位为c(厘米),m, i(英寸), p(打印机的点) |
举例说明:
import tkinter
mac = tkinter.Tk() # 初始化Tk()创建Mac窗口对象
mac.geometry("200x100+0+0")
label = tkinter.Label(mac,text="Hello,python.")
label.pack()
button1 = tkinter.Button(mac, text="BUTTON1")
button1.pack(side=tkinter.LEFT)
button2 = tkinter.Button(mac, text="BUTTON2")
button2.pack(side=tkinter.RIGHT)
mac.mainloop()
运行结果:
2. grid:
采用表结构组织组件。
调用子组件方法grid(),则该子组件在其父组件中采取grid布局。
gird函数提供的参数:
option | 解释 |
---|---|
column | 插件摆放的列数值,从0开始,默认为0。 |
columnpan | (在正常情况下,一个插件只占一个单元。)合并一行中的多个近邻单元 |
row | 插件摆放的行数值,从0开始,默认为0。 |
rowspan | 合并一列中的多个近邻单元 |
padx,pady | x/y方向的外部填充。在插件外部,左右(上下)方向各填充指定长度的空间 |
ipadx,ipady | x/y方向的内部填充。在插件内部,左右(上下)方向各填充指定长度的空间 |
sticky | 在插件正常尺寸下,如何分配单元中多余的空间,具体如下: |
- 如果没有声明sticky,默认将插件居中与单元中
- sticky=tk.N/E/W/S/NE/NW/SW/SE,将插件布局在单元的某个方向上。
- sticy=tk.N+tk.S,在垂直方向上延伸插件,并且保持水平居中。
- sticky=tk.E+tk.W,在水平方向上延伸插件,并且保持垂直居中。
- sticky=tk.N+tk.S+tk.W+tk.E,所有方向延伸插件,填满单元。
3. place:
允许指定组件的大小和位置,优点是可以精确控制组件的位置,缺点是改变窗口大小时,子组件不能随之灵活改变大小。
调用子组件方法place(),则该子组件在其父组件中采取place布局。
place函数提供的参数:
option | 解释 | 取值范围 |
---|---|---|
x, y | 绝对坐标 | 从0开始的整数 |
relx,rely | 相对坐标 | 0~1.0 |
height, weight | 高度和宽度 | 单位为像素 |
anchor | 对齐方式 | ‘n’, ‘s’, ‘e’, ‘w’, ‘nw’, ‘ne’, ‘sw’, ‘se’, ‘center’(默认值) |
举例说明:
import tkinter
mac = tkinter.Tk() # 初始化Tk()创建Mac窗口对象
mac["width"]=220
mac["height"]=90
mac.title("登录")
tkinter.Label(mac, text="用户名", width=6).place(x=1,y=5)
tkinter.Entry(mac, width=15).place(x=55,y=5)
tkinter.Label(mac, text="密码", width=6).place(x=1,y=25)
tkinter.Entry(mac, width=15, show='*').place(x=55,y=25)
tkinter.Button(mac, text="登录", width=8).place(x=30,y=60)
tkinter.Button(mac, text="取消", width=8).place(x=100,y=60)
mac.mainloop()
运行结果:
Tkinter组件
组件名称 | 含义 |
---|---|
Button | 按钮 |
Canvas | 画布(提供绘图功能) |
CheckButton | 多选框 |
Entry | 文本框 |
Frame | 框架(包含其他组件的纯容器) |
Label | 标签 |
ListBox | 列表框 |
Menu | 菜单(点击弹出选项列表) |
Menubutton | 菜单按钮(有下拉式、层叠式等) |
Message | 消息框(可以显示多行文本) |
Radiobutton | 一组按钮但是只有一个可以被按下 |
Scale | 进度条 |
Scrollbar | 滚动条(对其支持的组件提供滚动功能) |
Text | 多行文字区域 |
还有一些其他不常用的控件:
标准属性:
可以通过如下三种方法修改属性:
button1 = Tkinter.Button(root, text="Yes") # 按钮组件的构造函数
button1.config(text="Yes") # 组件对象的config方法
button1["text"] = "Yes" # 组件对象的属性赋值
常用组件举例:
- Label:用于在窗体中显示文本或位图。在这里插入图片描述
举例说明:
from tkinter import *
import tkinter
mac = tkinter.Tk() # 初始化Tk()创建Mac窗口对象
mac.title("My Window")
lb1 = Label(mac, height = 5, text="Hello!")
lb1.pack()
bm = PhotoImage(file = r"/Users/lilhoe/Desktop/Python/pygame/壁球/PYG03-pink-flower.png")
lb2 = Label(mac,image = bm)
lb2.pack()
mac.mainloop()
运行结果:
- Label:按钮可以包含文本、图像,可以通过command属性将调用的Python函数或方法关联到按钮上。
button的属性:
3. 单行文本框Entry
entry可以通过.get()函数获取用户输入的内容。
-
多行文本框Text
新创建的Text内容为空,可以通过.insert(标记,内容)在标记处插入文本内容。标记可以是行号或者以下标识:INSERT插入点,END最后字符,CURRENT鼠标当前位置。 -
画布Canvas
canvas常用选项:
6. 字体Font
通过元组表示:(字体名font family,字体大小size,修饰符modifiers)
python事件处理
事件类型的通用格式:<[modifier-]…type[-detail]>
组合键定义中常用的modifier:
对于每一个组件来说,可以通过bind()方法将将自己定义的函数绑定到具体事件上,主要有键盘、鼠标、窗体事件三类。
键盘事件
鼠标事件
窗体事件
事件绑定
1. 创建组件对象时指定
创建组件对象实例时,可以通过command参数传递函数名(不是函数调用)。
2.实例绑定
.bind(“事件类型”, 函数名)
3.类绑定
组件实例名.bind_class(“组件类”, “<事件类型>”, 事件处理函数)
事件处理函数
事件处理函数往往带有一个参数event,触发事件调用事件处理函数时,将传递Event对象实例。
event对象实例的主要参数: