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