文章目录
Tkinter 模块( Tk 接口)是 Python 的标准 Tk GUI 工具包的接口。Tkinter可以在大多数 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk 8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
创建 Windows 窗口
import tkinter # 导入 Tkinter 模块
win = tkinter.Tk() # 创建 Windows 窗口对象
win.title('我的第一个 GUI 程序') # 设置窗口标题
win.geometry("800x600") # 设置串口大小
#win.minsize(400, 600) # (选用)
#win.maxsize(1440, 800)
win.mainloop() # 进入消息循环,也就是显示窗口
效果如下图
其中,
- 设置窗口大小可使用
geometry()
方法,格式如下:
宽度x高度 (注:x是小写字母x,不是乘号)
- 可以使用
minsize()
方法设置窗口的最小尺寸,使用maxsize()
方法设置窗口的最大尺寸,方法如下:
窗口对象.minsize(最小宽度, 最大宽度)
窗口对象.maxsize(最小高度, 最大高度)
几何布局管理器
Tkinter 几何布局管理器(Geometry Manager)用于组织和管理父组件(往往是窗口)中子组件的布局方式。Tkinter 提供了 3 种不同风格的几何布局管理类,即pack
、grid
和place
。
pack 几何布局管理器
pack 几何布局管理器采用块的方式组织组件,pack 布局根据子组件创建生成的顺序将其放在快速生成的界面中。
调用子组件的方法pack()
,则该子组件在其父组件中采用 pack 布局:
pack(option=value, ...)
pack()
方法提供了如下表所示的若干参数选项。
选项 | 描述 | 取值范围 |
---|---|---|
side | 停靠在父组件的哪一边上 | ‘top’(默认值)、‘bottom’、‘left’、‘right’ |
anchor | 停靠位置,对应于东、南、西、北以及4个角 | ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值) |
fill | 填充空间 | ‘x’、‘y’、‘both’、‘none’ |
expand | 扩展空间 | 0或1 |
ipadx、ipady | 组件内部在x/y方向上填充的空间大小 | 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点) |
padx、pady | 组件外部在x/y方向上填充的空间大小 | 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点) |
import tkinter
root = tkinter.Tk()
root.geometry("400x300")
label = tkinter.Label(root, text='hello, python')
label.pack() # 将Label组件添加到窗口中显示
button1 = tkinter.Button(root, text='BUTTON1')
# 创建文字是“BUTTON1”的Button组件
button1.pack(side=tkinter.LEFT)
# 将button1组件添加到窗口中显示,左停靠
button2 = tkinter.Button(root, text='BUTTON2')
# 创建文字是“BUTTON2”的Button组件
button2.pack(side=tkinter.RIGHT)
# 将button2组件添加到窗口中显示,右停靠
root.mainloop()
运行效果如下图所示。
grid 几何布局管理器
grid 几何布局管理器采用表格结构组织组件。 子组件的位置由行/列确定的单元格决定,子组件可以跨越多行/列。在每一列中,列宽由这一列中最宽的单元格确定。grid 几何布局管理器适合表现表格形式的布局,可以实现复杂的界面,因而被广泛使用。
调用子组件的grid()
方法,则该子组件在其父组件中采用 grid 几何布局:
grid(option=value, ...)
grid()
方法提供了如下表所示的若干参数选项。
选项 | 描述 | 取值范围 |
---|---|---|
sticky | 组件津贴所在单元格的某一边角,对应于东、南、西、北以及4个角 | ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值) |
row | 单元格行号 | 整数 |
column | 单元格列号 | 整数 |
rowspan | 行跨度 | 整数 |
columnspan | 列跨度 | 整数 |
ipadx、ipady | 组件内部在x/y方向上填充的空间大小 | 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点) |
padx、pady | 组件外部在x/y方向上填充的空间大小 | 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点) |
from tkinter import *
root = Tk()
# 200x200代表了初始化是主窗口的大小,280和280代表了
# 初始化时窗口所在的位置
root.geometry('200x200+280+280')
root.title('计算器示例')
# grid(网格)布局
L1 = Button(root, text='1', width=5, bg='yellow')
L2 = Button(root, text='2', width=5)
L3 = Button(root, text='3', width=5)
L4 = Button(root, text='4', width=5)
L5 = Button(root, text='5', width=5, bg='green')
L6 = Button(root, text='6', width=5)
L7 = Button(root, text='7', width=5)
L8 = Button(root, text='8', width=5)
L9 = Button(root, text='9', width=5, bg='yellow')
L0 = Button(root, text='0')
Lp = Button(root, text='.')
L1.grid(row=0, column=0) # 按钮放置在0行0列
L2.grid(row=0, column=1) # 按钮放置在0行1列
L3.grid(row=0, column=2) # 按钮放置在0行2列
L4.grid(row=1, column=0) # 按钮放置在1行0列
L5.grid(row=1, column=1) # 按钮放置在1行1列
L6.grid(row=1, column=2) # 按钮放置在1行2列
L7.grid(row=2, column=0) # 按钮放置在2行0列
L8.grid(row=2, column=1) # 按钮放置在2行1列
L9.grid(row=2, column=2) # 按钮放置在2行2列
L0.grid(row=3, column=0, columnspan=2,
sticky=E+W) # 跨两行,左右贴紧
Lp.grid(row=3, column=2,
sticky=E+W) # 左右贴紧
root.mainloop()
运行效果如下图所示:
place 几何布局管理器
place 几何布局管理器允许指定组件的大小和位置。place 几何布局管理器的优点是可以精确地控制组件的位置,不足之处是改变窗口大小时子组件不能随之灵活地改变大小。
调用子组件的方法place()
,则该子组件在其父组件中采用 place 布局:
place(option=value, ...)
place()
方法提供了如下表所示的若干参数选项,用户可以直接给参数选项赋值加以修改。
选项 | 描述 | 取值范围 |
---|---|---|
x,y | 将组件放到指定位置的绝对坐标 | 从0开始的整数 |
relx,rely | 将组件放到指定位置的相对坐标 | 0~1.0 |
height,width | 高度和宽度,单位为像素 | |
anchor | 对齐方式,对应于东、南、西、北以及4个角 | ‘n’、‘s’、‘e’、‘w’、‘nw’、‘sw’、‘se’、‘ne’、‘center’(默认值) |
注意
Python 的坐标系是左上角为原点位置(0,0),向右是 x 坐标正方向,向下是 y 坐标正方向。
place 几何布局管理器的 GUI 示例程序如下所示:
from tkinter import *
root = Tk()
root.title("登录")
root['width'] = 200; root['height'] = 80
Label(root, text='用户名', width=6).place(x=1, y=1)
# 绝对坐标(1, 1)
Entry(root, width=20).place(x=45, y=1)
# 绝对坐标(45, 1)
Label(root, text='密码', width=6).place(x=1, y=20)
# 绝对坐标(1, 20)
Entry(root, width=20, show='*').place(x=45, y=20)
# 绝对坐标(45, 20)
Button(root, text='登录', width=8).place(x=40, y=40)
# 绝对坐标(40, 40)
Button(root, text='取消', width=8).place(x=110, y=40)
# 绝对坐标(110, 40)
root.mainloop()
运行效果如下图所示:
Tkinter 组件
Tkinter 提供了很多组件,例如按钮、标签和文本框等,在一个 GUI 应用程序中使用,这些组件通常被称为控件或者部件。Tkinter 组件如下表所示:
控件 | 描述 |
---|---|
Button | 按钮控件,在程序中显示按钮 |
Canvas | 画布控件,显示图形元素,例如线条或文本 |
Checkbutton | 多选框控件,用于在程序中提供多项选择框 |
Entry | 输入控件,用于显示简单的文本内容 |
Frame | 框架控件,在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件,可以显示文本和位图 |
Listbox | 列表框控件,用来显示一个字符串列表给用户 |
Menubutton | 菜单按钮控件,用于显示菜单项 |
Menu | 菜单控件,显示菜单栏、下拉菜单和弹出菜单 |
Message | 消息控件,用来显示多行文本,与Label比较类似 |
Radiobutton | 单选按钮控件,显示一个单选的按钮状态 |
Scale | 范围控件,显示一个数值刻度,为输出限定范围的数字区间 |
Scrollbar | 滚动条控件,在内容超过可视化区域时使用,例如列表框 |
Text | 文本控件,用于显示多行文本 |
Toplevel | 容器控件,用来提供一个单独的对话框,和Frame比较类似 |
Spinbox | 输入控件,与Entry类似,但是可以指定输入范围值 |
PanedWindow | PanedWindow是一个窗口布局管理的插件,可以包含一个或者多个子控件 |
LabelFrame | LabelFrame是一个简单的容器控件,常用语复杂的窗口布局 |
tkMessageBox | 用于显示应用程序的消息框 |
from tkinter import *
root = Tk()
button1 = Button(root, text="确定")
组件的标准属性也就是所有组件(控件)的共同属性,例如大小、字体和颜色等。Tkinter 组件常用的标准属性如下表所示。
属性 | 描述 |
---|---|
dimension | 控件大小 |
color | 颜色 |
font | 控件字体 |
anchor | 锚点(内容停靠位置),对应于东、南、西、北以及4个角 |
relief | 控件样式 |
bitmap | 位图,内置位图包括error、gray75、gray50、gray25 |