python 在我的日常使用中更多是作为粘合剂的形式,比如配合测试,统计整理数据等等的脚本,但是,当脚本需要输入过多参数的时候,在使用的时候就显得很麻烦了,所以引入图形化界面,由使用者输入这种形式的重要性就体现出来了
所以我们使用的图像化库只需要有以下几个功能即可:
- GUI库需要自带的控件
- 显示文本的标签
- 支持文本输入的控件
- 按钮
- 弹窗
- 提供展示结果的一些例如列表,富文本等的控件
- 不需要特别复杂的界面布局控制,有栅格化布局就行
- 在 windows 和 linux 下都能正常使用
结合上面的需求,所以 tkinter 是一个比较合适的选择的
Tkinter 简介
Tkinter 是 Python 的标准 GUI 库,这意味着,只要安装了 Python, 它就自带这个库,不用再额外下载安装 pip install
看一下下面的 demo, 先对使用 Tkinter 有个大致了解 ( 我的 Python 版本是 3.6.2,其中自带的 Tkinter 版本是 8.6 )
// 导入库
import tkinter
mainwindow = tkinter.Tk()
label = tkinter.Label(mainwindow, text="Hello World!")
label.pack()
mainwindow.mainloop()
上面这几行代码,可以弹出一个下面这样的界面

Tkinter 写一个界面大致流程:
- 定义一个主界面的窗口
mainwindow = tkinter.Tk() - 添加需要的控件,比如显示文本的标签,文本输入框,按钮等等
- 初始化控件的各种属性,比如它的长宽,背景色,线条等等,不能少的是它属于哪一个父容器
- 以某种布局方式放在这个父容器中 (
pack(),grid(),place())
- 最后
mainwindow.mainloop()来呈现窗口
实际开发过程中,使用到的控件可能特别多,布局也会更复杂,所以接下来主要就是介绍控件和布局管理
控件
Tkinter 一共提供了将近20种控件,十分丰富,但是这篇文章先对我常用的控件进行总结,后面在解析源码的时候,会完整介绍所有的控件
主窗口
我们的主窗口是通过 tkinter.Tk() 生成, 对于主窗口,一般常用的接口如下:
| 函数 | 描述 | 备注 |
|---|---|---|
| geometry(newGeometry=None) | 设置窗口大小和位置 | 输入的格式widthxheight+x+y(字符串)注意:width和height中间的是字母x不是*+x+y 是设置窗口显示时候的相对于屏幕左上角的位置,可以不写 |
| maxsize(width=None, height=None) | 设置窗口最大尺寸 | 输入参数2个都是整型 |
| minsize(width=None, height=None) | 设置窗口最小尺寸 | 输入参数2个都是整型 |
| resizable(width=None, height=None) | 固定窗口尺寸 | 输入参数2个都是整型 |
| title(string=None) | 设置窗口的名称 | 字符串 |
Label
Label 的定位就是可以展示文本和位图的控件,它涉及的可以参数很多,这些参数都是可选项,主要就是对 Label 的某个属性进行设置
| 参数 | 描述 | 输入值 |
|---|---|---|
| height | 标签的高 | int |
| width | 标签的宽 | int |
| state | 设置组件状态 | normal,disabled,active |
| activebackground | state = active 时的背景颜色 |
颜色英文单词或者形如 #FF0000 的字符串 |
| activeforeground | state = active 时文字和图像颜色 |
同上 |
| disabledforeground | state = disabled 时文字和图像颜色 |
同上 |
| background or bg | 标签的背景色 | 同上 |
| foreground or fg | 设置文本与图像颜色 | 同上 |
| highlightbackground | 没有焦点时高亮边框的颜色 | 同上 |
| highlightcolor | 获得焦点时高亮边框的颜色 | 同上 |
| highlightthickness | 高亮边框的宽度 | int |
| anchor | 文本或图像在标签里的位置 | n, s, e, w, nw, sw, se, ne, center(默认为center)其实就是:上北下南左西右东 |
| bitmap | 图标 | |
| borderwidth or bd | 边框宽度 | int |
| compound | 控制文本与图像/图标的显示状态 | none,bottom,top,left,right或center (默认none, 显示位图或图像(如果已定义)而不是文本) |
| cursor | 设置鼠标移动到标签时的形状 | |
| font | 设置标签文本字体 | tk中提供了一个 font 的类,可以单独设置字体的 family, size, weight, slant, underline, overstrike |
| image | 图像 | PhotoImage,BitmapImage,或者能兼容的对象,优先级高于 text 和 bitmap |
| justify | 显示多行文本时的对齐方式 | left, center 或 right |
| padx,pady | 水平、垂直方向的边距 | int |
| relief | 标签的 3-D 样式效果 |
raised, sunken, flat, ridge, solid 或 groove |
| takefocus | 设置标签是否接受输入焦点 | 布尔型 |
| text | 在标签上显示的文本信息 | string |
| textvariable | 为标签设置一个 StringVar()对象 |
如果变量值被修改,标签上的文本会自动更新 |
| underline | 指定字符下划线 | 默认值是 -1,例如设置为 0,则第 1 个字符处画下划线, 常用于表示键盘快捷键 |
| wraplength | 自动换行下指定的最大行长 | int |
我写几个例子,尽量多的使用到上面的参数
Entry
Button
布局管理
布局管理,也分为3种
| 布局管理 | 描述 |
|---|---|
| pack() | 包装 |
| grid() | 网格 |
| place() | 位置 |
https://docs.python.org/zh-cn/3/library/tkinter.ttk.html
https://github.com/shengqiangzhang/examples-of-web-crawlers
https://www.cnblogs.com/shwee/p/9427975.html